私は以下に一致する最良の方法を探しています:
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.deep.include.members([
{
C1: 'xxx'
}
]);
C0は実際には存在するが期待されていないため、上記は機能しません。要するに、私はこれが成功することを期待していますが、カスタムコードの束を書かずにそれを行う方法がわかりません...
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');
});
この問題をすべて解決するいくつかの異なるchaiプラグインがあります。私は shallow-deep-equal のファンです。次のように使用します。
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.shallowDeepEqual([
{
C1: 'xxx'
}
]);
プラグインなし: http://chaijs.com/api/bdd/#method_property
expect([
{
C1: 'xxx',
C0: 'this causes it not to match.'
}
]).to.have.deep.property('[0].C1', 'xxx');
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' });
});
#RobRaischのわずかに更新されたバージョン。空の比較では、 ''が ""と等しくないためエラーが発生します。
let expected = {
dateOfBirth: '',
admissionDate: '',
dischargeDate: '',
incidentLocation: null
};
Object.keys(expected).forEach(function(key) {
expect(actual[key]).to.equal(expected[key]);
});
私は最も簡単な(そして確かに最も簡単な)方法は次のようになると信じています:
var actual=[
{
C1:'xxx',
C0:'yyy'
}
];
actual.forEach(function(obj){
expect(obj).to.have.property('C1','xxx');
});
私は 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',
...
}
]
`
);