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' }]);
});

A​​faik 无法单独使用 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;
});