gpt4 book ai didi

node.js - 使用 SinonJS 捕获抛出的错误

转载 作者:搜寻专家 更新时间:2023-10-31 23:28:53 27 4
gpt4 key购买 nike

我有一个可能会抛出错误的方法,但我无法为这种情况编写 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com