繁体   English   中英

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

[英]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-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"});

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

不知道你为什么不考虑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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM