确定。我试图在这里阅读其他问题,但仍然没有找到一个直截了当的答案。
如何使用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')
和我真的认为expect(data).to.be.an('array').that.deep.contains({name: 'test'});
会起作用,但它不能成为部分匹配而且我在那里搞砸了。
答案 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)
干净,功能齐全且无依赖关系,只需使用地图即可过滤您要检查的密钥
类似:
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"});
答案 2 :(得分:1)
不确定你为什么解雇chai-subset
,因为这似乎有效:
expect(data).to.be.an("array").to.containSubset([{ name: "test" }]);