[英]Chai test array of objects to "contain something like" an object submatch
好的。 我试图在这里阅读其他问题,但仍然没有找到直接的答案。
如何使用 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'});
会起作用,但它在不是部分匹配时失败了,我有点搞砸了。
由于chai-like@0.2.14
以下方法将起作用:
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'});
干净,功能强大且无依赖,只需使用映射过滤您要检查的键
类似的东西:
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"});
不知道你为什么不考虑chai-subset
因为这似乎有效:
expect(data).to.be.an("array").to.containSubset([{ name: "test" }]);
没有第三方库或插件的解决方案:
var data = [ { name: 'test', value: 'bananas' } ];
expect(data.map(({name}) => ({name})).to.deep.include({name: 'test'});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.