Javascript 如何在有效回调后测试异步方法引发的错误? 形势
我正在为一个错误的异步方法编写一个单元测试,该方法接受回调 该方法当前有一个bug,在回调后抛出一个错误 错误代码 真正的代码是,但这里是一个抽象版本:Javascript 如何在有效回调后测试异步方法引发的错误? 形势,javascript,node.js,unit-testing,mocha.js,Javascript,Node.js,Unit Testing,Mocha.js,我正在为一个错误的异步方法编写一个单元测试,该方法接受回调 该方法当前有一个bug,在回调后抛出一个错误 错误代码 真正的代码是,但这里是一个抽象版本: var myBuggyMethod = function(callback) { if (!hasProperCredentials()) { callback('Error: invalid credentials'); } someAsyncFunction .finally(() => ca
var myBuggyMethod = function(callback) {
if (!hasProperCredentials()) {
callback('Error: invalid credentials');
}
someAsyncFunction
.finally(() => callback(null, myFailingMethod()));
}
var myFailingMethod = function() { throw new Error(); }
这里发生的情况是,如果haspropertredentials()
返回false
,它:
myFailingMethod
)return
作为前缀)
测试尝试
我想编写一个测试,该测试因错误代码而失败,但在修复时将通过
此测试可正确检测抛出的错误:
it('should not error when provided invalid credentials', function(done) {
expect(function() {
myBuggyMethod(function(err, data) {});
}).not.to.throw();
});
但是,它从不调用done
,这意味着如果满足预期,测试仍然失败(由于超时)
如果我在处理程序中添加done
,测试将错误地通过(因为错误发生在调用处理程序之后)
问题
在异步回调后触发错误时,是否可以创建正确检测错误的测试?如果是,如何处理?更复杂的是,在我的情况下,错误似乎被抛出调用堆栈之外,因此事实上,
not.To.throw()
行甚至没有捕获错误,它只是因为发生错误而正确地失败了。
it('should not error when provided invalid credentials', function(done) {
expect(function() {
myBuggyMethod(function(err, data) { done(); });
}).not.to.throw();
});