匹配Chai断言中的部分对象?

Jay*_*012 19 chai

我正在寻找匹配以下内容的最佳方式:

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

以上不起作用,因为C0存在于实际中,但不是预期的.简而言之,我希望这个期望通过PASS,但我不知道如何在不写一堆自定义代码的情况下做到这一点......

tho*_*nic 10

chai-subsetchai-fuzzy也可以执行你正在寻找的东西.

Chai-subset应该像这样工作:

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

就个人而言,如果我不想包含另一个插件,我将使用chai包含的propertykeys匹配的匹配器:

([
  {
    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');
});
Run Code Online (Sandbox Code Playgroud)


小智 5

没有插件: http: //chaijs.com/api/bdd/#method_property

  expect([
    {
      C1: 'xxx',
      C0: 'this causes it not to match.'
    }
  ]).to.have.deep.property('[0].C1', 'xxx');
Run Code Online (Sandbox Code Playgroud)


Seb*_*rin 5

干净、实用且无依赖性

只需使用映射来过滤您要检查的键

就像是:

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

expect(array.map(e=>e.C1)).to.include("xxx");
Run Code Online (Sandbox Code Playgroud)

https://www.chaijs.com/api/bdd/

======

编辑:为了提高可读性,将其抽象为实用函数:

// test/utils.js

export const subKey = (array, key) => array.map(e=>e[key]);
Run Code Online (Sandbox Code Playgroud)

然后将其导入到您的测试中,可以将其读作一个句子:

expect(subKey(array,"C1")).to.include("xxx");
Run Code Online (Sandbox Code Playgroud)


Rob*_*sch 1

我相信最简单(当然也是最简单)的方法是:

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

actual.forEach(function(obj){
  expect(obj).to.have.property('C1','xxx');
});
Run Code Online (Sandbox Code Playgroud)