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);})Promise.join(runTestForFile(file),getexpectedoutputfourfile(file),function(test,expected){return test.should.deep.equal(expected);})