Javascript 如何将承诺结果与承诺结果进行比较
我刚刚开始用摩卡,柴和柴作为承诺。我正在创建一个测试框架,它读取一系列测试文件,通过解析过程运行它们,并将结果与同一目录中并行文件中保存的一些输出进行比较 我最初的想法是:Javascript 如何将承诺结果与承诺结果进行比较,javascript,promise,mocha.js,chai,Javascript,Promise,Mocha.js,Chai,我刚刚开始用摩卡,柴和柴作为承诺。我正在创建一个测试框架,它读取一系列测试文件,通过解析过程运行它们,并将结果与同一目录中并行文件中保存的一些输出进行比较 我最初的想法是: var files = glob.sync('./tests/data/*.txt'); files.forEach(function(file) { it("correctly parses " + file.replace( /\.txt$/,''), function(){ return ru
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都返回承诺。如果有什么区别的话,我用的是蓝鸟。此操作失败,出现比较错误。实际值作为我的对象之一出现,正如预期的那样,但是预期值(由getExpectedOutputForFile返回)作为承诺的对象转储出现。我有点惊讶,因为我认为按照承诺使用chai会奏效。做:
it('test', function() {
Promise.resolve(2).should.eventually.equal(Promise.resolve(2));
});
很好。最后,我通过添加以下内容使其正常工作:
chaiAsPromised.transformAsserterArgs = function (args) {
return Promise.all(args);
};
但我不知道为什么这是必要的,也不知道它是如何真正改变事情的!有人能解释一下我遗漏了什么/建议一种更好的方法吗?你可以使用
Promise.join(runTestForFile(file),getexpectedoutforfile(file),function(test,expected){return test.should.deep.equal(expected);})是的,我想那会更好。我被Chaias承诺的“最终”的事情挂断了电话,这让我走上了正轨。我仍然不明白为什么要用Promise.all来包装它,但有什么区别吗?你可以使用Promise.join(runTestForFile(file),getexpectedoutputfourfile(file),function(test,expected){return test.should.deep.equal(expected);})是的,我想那会更好。我被Chaias承诺的“最终”的事情挂断了电话,这让我走上了正轨。我仍然不明白为什么要用承诺来包装它。但这一切都有什么不同吗?