如何在使用Mocha/Chai调用函数时强制抛出异常
How to force a function to throw exception when it invoked with Mocha/Chai
我想测试function B
捕获function A
与Mocha/Chai
抛出的异常。
function A() {
// 1. the third party API is called here
// some exception may be thrown from it
...
// 2. some exception could be thrown here
// caused by the logic in this function
}
function B() {
// To catch exception thrown by A()
try {
A();
} catch(err) {
console.error(err);
}
...
}
我想强制A
抛出异常,而做B
的测试。所以我可以确保函数B
从A
正确捕获异常。
搜索了一些帖子后:
Mocha中预期失败的测试
用Mocha/Chai测试JS异常
我没有找到正确答案。
我的问题合理吗?如果是,如何使用Mocha/Chai
进行测试?
这叫做嘲弄。为了测试函数B
,您应该模拟函数A
以正确的方式运行。因此,在测试之前,您定义A
类似于A = function(){ throw new Error('for test');}
调用,并验证被调用时B
的行为是否相应。
describe('alphabet', function(){
describe('A', function(){
var _A;
beforeEach(function(){
var _A = A; //save original function
A = function () {
throw new Error('for test');
}
});
it('should catch exceptions in third party', function(){
B();
expect(whatever).to.be.true;
});
afterEach(function(){
A = _A;//restore original function for other tests
});
}
})
既然你已经在用摩卡搭配Chai了,你可能会对Sinon感兴趣。它极大地扩展了Mocha功能。在这种情况下,您将使用存根来简化模拟和恢复
相关文章:
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在输入字段上有两个函数调用,一个在Blur上,一个不在Angular中
- 如何在Javascript函数调用中循环变量
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何远程检查JavaScript应用程序的函数调用堆栈
- javascript函数调用不起作用
- 为什么这个函数调用会破坏程序并导致未定义的变量
- 如何通过函数调用设置图像的src
- 从全局函数调用Ember控制器上的方法
- 为什么Jquery$.ajax在函数调用中触发所有statusCode,即使调用成功
- JavaScript函数调用(arg1)(arg2)
- 打印链接时,将javascript函数调用到链接中
- 在函数调用中封装数据除了隐藏数据之外还有什么优点
- 无法从JavaScript中的函数调用对象属性
- 对中的函数调用进行排序是回调的唯一方法
- 函数调用方法有什么用
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- HTML5(Bootstrap)通过函数调用运行动画
- 函数调用不起作用
- 函数中的Javascript函数调用