这个问题在这里已有答案:
我应该怎样用mocha和chai测试我的承诺失败了?
我很困惑,因为我最初认为我应该使用'mocha-as-promised',但该软件包现已弃用(我现在已经内置到mocha中了 . 请参阅:https://github.com/domenic/mocha-as-promised
另一篇文章建议取消对it()回调的'done'参数 - 不确定我理解为什么,因为我理解传递'done'参数是表示测试是异步测试的方式 . 见:How do I properly test promises with mocha and chai?
无论如何,我试图将我的问题减少到下面的代码 - 请帮我修改这个,以便我可以测试我的承诺确实失败了 .
it.only("do something (negative test)", function (done) {
var Q = require('q');
function makePromise() {
var deferred = Q.defer();
deferred.reject(Error('fail'));
return deferred.promise;
};
makePromise()
.then(done, done);
});
3 回答
更多的挖掘,似乎正确的方法是添加一个额外的捕获块,如此...
我对其他想法很感兴趣,或者确认这样做很好..谢谢 .
更新:
本 - 我现在说你说的是什么,尤其是 . 在本杰明G的简短但有用的评论之后
总结一下:
当你传入一个
done
参数时,测试应该通过调用done()
函数触发它's ' done-ness';如果未传入
done
参数,则通常仅适用于同步调用 . 但是,如果你承诺,mocha框架(mocha> 1.18)将捕获通常会被吞下的任何失败(根据promises规范) . 这是一个更新版本:您可以返回一个承诺,表示测试是异步的:
chai-as-promised
为Promises提供了一个干净的测试框架:在您的测试文件中:
这感觉干净,直观 . 但你可以完成类似的东西,而不像这样承诺: