我正按照承诺开始使用Mocha,Chai和Chai。我正在创建一个测试框架,它读入一系列测试文件,通过解析过程运行它们,并将结果与同一目录中并行文件中的一些保存输出进行比较。
我最初的抨击似乎是:
var files = glob.sync('./tests/data/*.txt');
files.forEach(function(file) {
it("correctly parses " + file.replace( /\.txt$/,''), function(){
return runTestForFile(file).should.eventually.deep.equal(
getExpectedOutputForFile(file));
});
});
runTestForFile和getExpectedOutputForFile都返回promises。我正在使用蓝鸟,如果这有任何区别。这与比较错误失败。正如预期的那样,实际值作为我的一个对象出现,但getExpectedOutputForFile返回的期望值将作为promise的对象转储出现。我有点惊讶,因为我认为通过使用chai-as-promised这将起作用。这样做的:
it('test', function() {
Promise.resolve(2).should.eventually.equal(Promise.resolve(2));
});
工作正常。最后,我通过添加:
来实现它chaiAsPromised.transformAsserterArgs = function (args) {
return Promise.all(args);
};
但我不知道为什么这是必要的,或者它是如何真正改变的!有人可以解释我缺少的东西/建议更好的方法吗?