Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 摩卡ES6承诺_Javascript_Mocha.js_Ecmascript 6_Chai_Es6 Promise - Fatal编程技术网

Javascript 摩卡ES6承诺

Javascript 摩卡ES6承诺,javascript,mocha.js,ecmascript-6,chai,es6-promise,Javascript,Mocha.js,Ecmascript 6,Chai,Es6 Promise,我用的是咖啡和摩卡/柴 我对承诺的断言不起作用。以下是一个样本测试: it('should fail',函数(done){ 新承诺(功能(解决、拒绝){ 决议(假); }).然后(函数(结果){ 断言。相等(结果,真); 完成(); }).catch(函数(err){ 控制台日志(err); }); }); 当我运行此测试时,由于超时而失败。在then块中抛出的断言失败在catch块中被捕获。我怎样才能避免这一点,直接扔给摩卡咖啡 我可以直接从catch函数中抛出它,但是我如何对catch块

我用的是咖啡和摩卡/柴

我对承诺的断言不起作用。以下是一个样本测试:

it('should fail',函数(done){
新承诺(功能(解决、拒绝){
决议(假);
}).然后(函数(结果){
断言。相等(结果,真);
完成();
}).catch(函数(err){
控制台日志(err);
});
});
当我运行此测试时,由于超时而失败。在then块中抛出的断言失败在catch块中被捕获。我怎样才能避免这一点,直接扔给摩卡咖啡


我可以直接从catch函数中抛出它,但是我如何对catch块进行断言呢?

如果您的承诺失败,它将只调用catch回调。结果,Mocha的done回调从未被调用,Mocha也从未发现承诺失败(因此它等待并最终超时)


您应该替换
console.log(err)
完成(错误)。当您将错误传递给“完成”回调时,Mocha应自动显示错误消息。

我最终通过使用解决了问题

它允许您对承诺的解决和拒绝做出断言:

  • 退货承诺.应.成为(价值)
  • 应拒绝退货承诺

我在摩卡/柴/es6承诺测试中使用的模式如下:

it('should do something', function () {

    aPromiseReturningMethod(arg1, arg2)
    .then(function (response) {
        expect(response.someField).to.equal("Some value")
    })
    .then(function () {
        return anotherPromiseReturningMethod(arg1, arg2)
    })
    .then(function (response) {
        expect(response.something).to.equal("something")
    })
    .then(done).catch(done)

})
最后一行看起来很奇怪,但称摩卡咖啡是成功还是错误

一个问题是,如果最后一个然后返回某个内容,那么我需要在
then
catch
之前执行noop()*:

it('should do something', function () {

    aPromiseReturningMethod(arg1, arg2)
    .then(function (response) {
        expect(response.someField).to.equal("Some value")
    })
    .then(function () {
        return anotherPromiseReturningMethod(arg1, arg2)
    })
    .then(_.noop).then(done).catch(done)

})
*洛达斯的努普()


我很想听到对这种模式的任何批评

你检查了吗?你的捕获不应该是,
console.log(err);完成(错误)?@thefourtheye-promise断言是我正在寻找的。谢谢,这是一个很好的资源。@mido22接下来的问题是对承诺的拒绝做出断言。但是,正如上面四叶所说,Mocha显然内置了这个功能。如果您断言承诺成功,并且不需要断言任何其他内容,您只需返回承诺值,而无需调用
。then()
。catch()
。这是否回答了你的问题?那么我如何才能对承诺中的拒绝做出断言?你这是什么意思?承诺是成功还是失败?如果它被认为是成功的,我不明白你为什么需要断言拒绝,只要你确保它不会发生。因为你想断言拒绝承诺的条件。就个人而言,我不会在测试用例中从任何onFullFilled处理程序返回任何东西。但是为了避免返回值a
。那么(done.bind(null,null),done)
对我来说似乎更简洁。您好,可以按照承诺使用chai为上述问题提供粘贴代码吗?