我怎样才能将柴氏和柴氏结合起来?

我想写一个NodeJS chaitesting,它检查某个服务调用(这是一个数组)的结果是否包含一个与我所期望的相等的对象。 结果中可能会有更多的字段,我不想检查。

有两个柴的插件可以解决这个问题: chai-things (允许你使用像expect(i).to.include.something.that.deep.equals这样的语法)和chai-like (允许你使用像expect(i).to.be.like )的语法。

但是,它们并不起作用。

看到这个最小的工作示例:

 const chai = require('chai') const expect = chai.expect chai.use(require('chai-things')) chai.use(require('chai-like')) describe('the chai setup', function() { it('should work', function(done) { const i = [{ name: 'Name A', age: 1 }, { name: 'Name B', age: 2 }] // Works expect(i).to.include.something.that.deep.equals({ name: 'Name B', age: 2 }) // Works expect(i[1]).to.be.like({ name: 'Name B' }) // Doesn't work expect(i).to.include.something.that.like({ name: 'Name B' }) done() }) }) 

这不起作用,并引发错误消息:

AssertionError:预计{name:'Name B',age:2} like {name:'Name B'}

这怎么解决?

使用外部插件并不总是以预期的结果结束。 最有可能的是一些命令相互碰撞,因为如果一起testing,它们没有被彻底testing。

另一种方法是简单地使用一个函数并循环你的数组。 这里是在浏览器中使用Mocka和Chai的循环的一个工作示例:

 function checkNestedObjects(obj){ expect(obj).is.an('object') //expect(obj).to.have.keys(['a','b','c']); //- Fires Error expect(obj).to.have.keys(['a','b']); } var initArray=[{"a":1,"b":1},{"a":2,"b":2}]; for( var i=0; i < initArray.length; i++){ checkNestedObjects(initArray[i]) } 
 <!DOCTYPE html> <html> <head> <link href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.min.css" rel="stylesheet"/> </head> <body> <div id="mocha"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script> <script>mocha.setup('bdd')</script> <script> var expect = chai.expect; mocha.run(); </script> </body> </html> 

加载chai-things 之前加载chai-like ,使它们一起工作:

 chai.use(require('chai-like')) chai.use(require('chai-things'))