Mocha Chai:Deep 包含一组对象,但只有预期对象的一部分
Mocha Chai: Deep include an array of objects, but only have part of expected object
我为此使用了 chai 的 assert
语法。
我知道如果我想检查对象数组中的特定对象,我可以这样做:
assert.deepInclude(
[
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 }
],
{ name: 'foo', id: 1 }
)
哪个应该通过。
但是如果我正在检查的对象中只有 1 个 属性 怎么办...?像这样:
assert.deepInclude(
[
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 }
],
{ name: 'foo' }
)
我仍然希望它通过,但它告诉我它失败了,因为那个确切的对象不存在。
使用 chai-subset 这可以很容易地完成:
const chai = require('chai');
const chaiSubset = require('chai-subset');
chai.use(chaiSubset);
it('should contain subset', () => {
const actual = [
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 },
];
expect(actual).to.containSubset([{ name: 'foo' }]);
});
Afaik 无法单独使用 chai
执行此操作,但您可以编写自己的函数:
function containsPartialObj(arr, obj) {
return arr.some(entry => {
const keys = Object.keys(obj);
return keys.every(key => obj[key] === entry[key]);
});
}
it('should contain subset', () => {
const actual = [
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 },
];
expect(containsPartialObj(actual, { name: 'foo' })).to.be.true;
});
我为此使用了 chai 的 assert
语法。
我知道如果我想检查对象数组中的特定对象,我可以这样做:
assert.deepInclude(
[
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 }
],
{ name: 'foo', id: 1 }
)
哪个应该通过。
但是如果我正在检查的对象中只有 1 个 属性 怎么办...?像这样:
assert.deepInclude(
[
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 }
],
{ name: 'foo' }
)
我仍然希望它通过,但它告诉我它失败了,因为那个确切的对象不存在。
使用 chai-subset 这可以很容易地完成:
const chai = require('chai');
const chaiSubset = require('chai-subset');
chai.use(chaiSubset);
it('should contain subset', () => {
const actual = [
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 },
];
expect(actual).to.containSubset([{ name: 'foo' }]);
});
Afaik 无法单独使用 chai
执行此操作,但您可以编写自己的函数:
function containsPartialObj(arr, obj) {
return arr.some(entry => {
const keys = Object.keys(obj);
return keys.every(key => obj[key] === entry[key]);
});
}
it('should contain subset', () => {
const actual = [
{ name: 'foo', id: 1 },
{ name: 'bar', id: 2 },
];
expect(containsPartialObj(actual, { name: 'foo' })).to.be.true;
});