我怎样才能把柴物和柴似的结合起来?

时间:2016-06-03 10:58:27

标签: node.js chai

我想写一个NodeJS chai测试,它检查一些service-call(这是一个数组)的结果是否包含一个与我期望的对象相同的对象。结果中可能还有一些字段,我不想检查。

有两个可以解决此问题的chai插件:chai-things(允许您使用expect(i).to.include.something.that.deep.equals)和chai-like等语法(允许您使用Success when I use form-data之类的语法{1}})。

但是,结合起来他们不能工作。

请参阅此最小工作示例:

expect(i).to.be.like

这不起作用并抛出错误消息:

  

AssertionError:期望{name:'名称B',年龄:2}喜欢{name:   '姓名B' }

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

使用外部插件并不总是以预期结果结束。很可能一些命令发生碰撞,因为如果完全一起测试它们就没有经过彻底的测试。

另一种方法是简单地使用一个函数并循环你的数组。以下是在浏览器中使用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])
}
&#13;
<!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>
&#13;
&#13;
&#13;

有时循环中需要异步函数。然后可以使用Promises调用循环函数。如何使用forEach循环数组以及如何使用Promise.all调用&#34; done()&#34;这里显示的很好:Node JS Promise.all and forEach

答案 1 :(得分:1)

在加载chai-like之前加载chai-things 以使它们协同工作:

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