2017-06-16 41 views
0

好的。我试图在这里阅读其他问题,但仍未找到明确的答案。柴测试对象的数组以“包含类似”对象子匹配

如何在使用chai的数组中声明部分对象匹配? 类似以下内容:

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

只是为了澄清,我的目的是让尽可能接近地提供的示例。

  • 到链上的​​和
  • 后只提供局部对象作为参数(不像chai-subset)。

我真的认为expect(data).to.be.an('array').that.deep.contains({name: 'test'});会工作,但它不会失败,因为它不是一个部分匹配,我有点拧在那里。

回答

1

不知道为什么你被解雇chai-subset因为这似乎工作:

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

好吧,我必须承认我根本不喜欢'containSubset'命名和额外的括号。我希望能找到一个纯粹使用'chai'的解决方案,但我想不是这样的。我试着挖掘一下'.contains.something.like({...})'版本(同时使用'chai-things'和'chai-like'),我喜欢听起来很自然,而我我发现[为什么](https://github.com/zation/chai-like/pull/12)它[不工作](https://stackoverflow.com/q/41726208/336753)在第一名。我知道..两个插件,而不是一个,但我只是更喜欢措辞和更简单的参数。 – kub1x

1

由于[email protected]以下工作:

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.somethig.like({name: 'test'});