如何编写 Jasmine 测试来验证异步回调不会引发错误?
我正在用这个基本模式编写一个函数:
myFunction: function (callback) {
this.doSomethingAsync(function () {
if (callback) {
callback();
}
});
return "done";
}
参数callback
是可选的。因此,如果用户未提供回调,则 if
语句将跳过回调。
我想编写一个 Jasmine 测试,如果将来有人删除 if
语句,该测试将会失败。但是,我想不出如何构建测试。
删除 if
语句并调用 myFunction
的结果是 Javascript 引发此 TypeError
:
Uncaught TypeError: callback is not a function
但是,我想不出如何设置 Jasmine 测试来验证没有出现此类错误。
最佳答案
你可以去掉 doSomethingAsync 函数,让它只调用回调函数
describe('doSomthingAsync', function(){
function A(){
this.doSomethingAsync = function(cb){
setTimeout(function(){
cb();
},2000);
}
this.myFunction = function(cb){
this.doSomethingAsync(function(){
cb();
})
}
}
it('tests for the throws', function(){
var a = new A();
a.doSomethingAsync = function(cb){
cb();
}
var func = function(){
a.myFunction();
};
var func2 = function(){
a.myFunction(function(){
console.log('ping');
});
}
expect(func).toThrow(Error);
expect(func2).not.toThrow(Error);
});
});
不过,我可能会强制执行回调是可选的这一事实,方法是放置代码以检查回调是否在别处定义。
...
this.doSomethingAsync = function(cb){
setTimeout(function(){
if(cb && typeof cb === 'function'){
cb();
}
//do other stuff
}, 2000)
}
关于javascript - Jasmine 测试以验证回调不会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30224309/