Chai 测试对象数组到 "contain something like" 一个对象子匹配
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')
和 之后链接
- 仅提供部分对象作为参数(与 chai-subset 不同)。
我真的认为 expect(data).to.be.an('array').that.deep.contains({name: 'test'});
会起作用,但它失败了,因为它不是部分匹配,我有点被搞砸了。
不确定您为什么拒绝 chai-subset
,因为这似乎有效:
expect(data).to.be.an("array").to.containSubset([{ 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'});
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"});
没有第三方库或插件的解决方案:
var data = [ { name: 'test', value: 'bananas' } ];
expect(data.map(({name}) => ({name})).to.deep.include({name: 'test'});
好的。我试图在这里阅读其他问题,但仍然没有找到直接的答案。
如何使用 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'});
会起作用,但它失败了,因为它不是部分匹配,我有点被搞砸了。
不确定您为什么拒绝 chai-subset
,因为这似乎有效:
expect(data).to.be.an("array").to.containSubset([{ 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'});
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"});
没有第三方库或插件的解决方案:
var data = [ { name: 'test', value: 'bananas' } ];
expect(data.map(({name}) => ({name})).to.deep.include({name: 'test'});