Chai测试对象数组“包含类似”对象子匹配

时间:2017-06-16 18:19:39

标签: chai

确定。我试图在这里阅读其他问题,但仍然没有找到一个直截了当的答案。

如何使用chai在数组中声明部分对象匹配? 如下所示:

var expect = require('chai').expect;
var data = [ { name: 'test', value: 'bananas' } ];
expect(data).to.be.an('array').that.contains.somethig.like({name: 'test'});

为了澄清,我的意图是尽可能接近提供的示例。

  • .be.an('array')
  • 之后进行链接
  • 仅提供部分对象作为参数(与chai-subset不同)。

我真的认为expect(data).to.be.an('array').that.deep.contains({name: 'test'});会起作用,但它不能成为部分匹配而且我在那里搞砸了。

3 个答案:

答案 0 :(得分:5)

chai-like@0.2.14开始,以下approch将起作用:

var chai = require('chai'),
    expect = chai.expect;

chai.use(require('chai-like'));
chai.use(require('chai-things')); // Don't swap these two

expect(data).to.be.an('array').that.contains.something.like({name: 'test'});

答案 1 :(得分:2)

ES6 +

干净,功能齐全且无依赖关系,只需使用地图即可过滤您要检查的密钥

类似:

const data = [ { name: 'test', value: 'bananas' } ];
expect(data.map(e=>e.name)).to.include("test");

,如果要测试多个按键,则:

expect(data.map(e=>({name:e.name}))).to.include({name:"test"});

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

答案 2 :(得分:1)

不确定你为什么解雇chai-subset,因为这似乎有效:

expect(data).to.be.an("array").to.containSubset([{ name: "test" }]);