Roy*_*oyM 9 javascript mocha.js node.js promise
我应该怎样用mocha和chai测试我的承诺失败了?
我很困惑,因为我最初认为我应该使用'mocha-as-promised',但是该软件包现在已被弃用(我正在使用mocha 2.1.0),建议只使用现在内置的promise测试摩卡.请参阅:https://github.com/domenic/mocha-as-promised
另一篇文章建议废除it()回调的'done'参数 - 不确定我理解为什么,因为我的理解是传递'done'参数是表示测试是异步测试的方式.请参阅:如何使用mocha和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);
});
Run Code Online (Sandbox Code Playgroud)
更多的挖掘,似乎正确的方法是添加一个额外的捕获块,如此...
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()
.catch(function(e) {
expect(e.message).to.equal('fail');
})
.then(done, done);
});
Run Code Online (Sandbox Code Playgroud)
我对其他想法很感兴趣,或者确认这样做很好..谢谢.
更新:
本 - 我现在说你说的是什么,尤其是.在本杰明G的简短但有用的评论之后
总结一下:
当你传入一个done参数时,测试应该通过调用done()函数触发它的'done-ness' ;
如果未传入done参数,则通常仅适用于同步调用.但是,如果你返回一个promise,mocha框架(mocha> 1.18)将捕获通常会被吞下的任何失败(根据promises规范).这是一个更新版本:
it.only("standalone neg test for mocha+promises", function () {
var Q = require('q');
function makePromise() {
var deferred = Q.defer();
deferred.reject(Error('fail'));
return deferred.promise;
};
return makePromise()
.catch(function(e) {
expect(e.message).to.equal('fail');
});
});
Run Code Online (Sandbox Code Playgroud)
您可以返回一个承诺来表明测试是异步的:
function something() {
return Q.reject(Error('fail'));
}
it('should reject', function() {
return something().then(function() {
throw new Error('expected rejection');
},
function() {
return 'passed :]';
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10460 次 |
| 最近记录: |