web-dev-qa-db-ja.com

Chaiアサーションの部分オブジェクトと一致しますか?

私は以下に一致する最良の方法を探しています:

expect([
    {
        C1: 'xxx',
        C0: 'this causes it not to match.'
    }
]).to.deep.include.members([
    {
        C1: 'xxx'
    }
]);

C0は実際には存在するが期待されていないため、上記は機能しません。要するに、私はこれが成功することを期待していますが、カスタムコードの束を書かずにそれを行う方法がわかりません...

20
JayPrime2012

chai-subset または chai-fuzzy でも、探しているものを実行できます。

Chaiサブセットは次のように機能するはずです。

expect([
  {
    C1: 'xxx',
    C0: 'this causes it not to match.'
  }
]).to.containSubset([{C1: 'xxx'}]);

個人的には、別のプラグインを含めたくない場合は、propertyまたはkeysマッチャーを使用します。

([
  {
    C1: 'xxx',
    C0: 'this causes it not to match.'
  }
]).forEach(obj => {
  expect(obj).to.have.key('C1'); // or...
  expect(obj).to.have.property('C1', 'xxx');
});
10
thom_nic

この問題をすべて解決するいくつかの異なるchaiプラグインがあります。私は shallow-deep-equal のファンです。次のように使用します。

expect([
    {
      C1: 'xxx',
      C0: 'this causes it not to match.'
    }
  ]).to.shallowDeepEqual([
    {
      C1: 'xxx'
    }
  ]);
4
Pete Hodgson

プラグインなし: http://chaijs.com/api/bdd/#method_property

  expect([
    {
      C1: 'xxx',
      C0: 'this causes it not to match.'
    }
  ]).to.have.deep.property('[0].C1', 'xxx');
2
ni-ko-o-kin

pickおよびomitアンダースコア関数を使用して、テストするプロパティを選択/拒否できます。

const { pick, omit } = require('underscore');

const obj = {
  C1: 'xxx',
  C0: 'this causes it not to match.',
};

it('tests sparse object with pick', () => {
  expect(pick(obj, 'C1')).to.eql({ C1: 'xxx' });
});

it('tests sparse object with omit', () => {
  expect(omit(obj, 'C0')).to.eql({ C1: 'xxx' });
});
1
Hirurg103

#RobRaischのわずかに更新されたバージョン。空の比較では、 ''が ""と等しくないためエラーが発生します。

let expected = {
            dateOfBirth: '',
            admissionDate: '',
            dischargeDate: '',
            incidentLocation: null
        };
        Object.keys(expected).forEach(function(key) {
            expect(actual[key]).to.equal(expected[key]);
        });
0
Farhan

私は最も簡単な(そして確かに最も簡単な)方法は次のようになると信じています:

var actual=[
  {
    C1:'xxx',
    C0:'yyy'
  }
];

actual.forEach(function(obj){
  expect(obj).to.have.property('C1','xxx');
});
0
Rob Raisch

私は chai-match-pattern および lodash-match-pattern を記述して、部分一致(およびその他多数)のディープマッチングシナリオを処理しました。

var chai = require('chai');
var chaiMatchPattern = require('chai-match-pattern');
chai.use(chaiMatchPattern);

// Using JDON pattern in expectation
chai.expect([
  {
    C1: 'xxx',
    C0: 'this causes it not to match.'
  }
]).to.matchPattern([
  {
    C1: 'xxx',
    '...': ''
  }
]);

// Using the slightly cleaner string pattern notation in expectation
chai.expect([
  {
    C1: 'xxx',
    C0: 'this causes it not to match.'
  }
]).to.matchPattern(`
  [
    {
      C1: 'xxx',
      ...
    }
  ]
  `
);
0
mjhm