我有一个可能会抛出错误的方法,但我无法为这种情况编写 SinonJS/Mocha/Should 单元测试用例。
被测函数示例:
function testError(value) {
if (!value) {
throw new Error('No value');
return false;
}
};
示例测试:
describe('#testError', function() {
it('throws an error', function() {
var spy = sinon.spy(testError);
testError(false);
spy.threw().should.be.true();
});
});
这个输出:
#testError
1) throws an error
0 passing (11ms)
1 failing
1) #testError throws an error:
Error: No value
at testError (tests/unit/js/test-error.js:6:14)
at Context.<anonymous> (tests/unit/js/test-error.js:14:6)
我原以为 Sinon 会捕捉到错误并允许我监视 throw ,但它似乎没有通过测试。有什么想法吗?
我提到了 Don't sinon.js spys catch errors?但唯一的解决方案是使用 expect
。如果可能的话,我更愿意使用单个断言库。
最佳答案
这似乎在 try
/catch
中起作用:
function foo() { throw new Error("hey!"); }
var fooSpy = sinon.spy(foo);
try {
fooSpy();
} catch (e) {
// pass
}
assert(fooSpy.threw());
请注意,您必须调用 fooSpy
,而不是 foo
本身。
但还要注意 .should.be.true()
不是 Sinon 的一部分,因此您可能已经在使用 Chai 或类似的库,其中如果 expect(foo).to.have.thrown()
或 assert.throws(foo, someError)
语法看起来更好。
更新:如果您使用的是 ShouldJS,看起来您可以使用 should.throws
.我仍然认为这比为此目的使用 Sinon 版本更好。
关于node.js - 使用 SinonJS 捕获抛出的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32893279/