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为上述问题提供粘贴代码吗?