我们已经在很多规格文件中使用useFakeTimers()(sinon v11.x)很长时间了。最近,我们更新了sinon到14.x版本,现在测试失败了,错误如下。TypeError:无法在同一全局对象上安装两次伪计时器。我们也试过使用createSandbox(),但没有帮助。
useFakeTimers()
createSandbox()
ars1skjm1#
该问题似乎是在Sinon 12.x之后,未恢复规范文件中的时钟,将其注入全局范围,从而引发上述错误。因此,修复方法是,根据您使用的是beforeAll()还是beforeEach(),在afterAll()或afterEach()中调用clock.restore()。
beforeAll()
beforeEach()
afterAll()
afterEach()
clock.restore()
iq0todco2#
所以,我遇到了这个错误,例如,如果我有两个测试都使用假计时器。你必须调用useFakeTimers独立于你的沙箱创建。“失败的原因"
/// Somefile const superTrialAndErrorSimulator = sinon.createSandbox({ useFakeTimers: true }); // Some other file const superTrialAndErrorSimulatorZool = sinon.createSandbox({ useFakeTimers: true });
如果你在设置沙盒后设置假计时器,然后重新设置它们,它就起作用了。欢迎来到sinon的试错世界。
因为某些原因
const ifOnlyThereWereABetterLibrary = sinon.createSandbox(); before(() => { ifOnlyThereWereABetterLibrary.useFakeTimers(); }); after(() => { ifOnlyThereWereABetterLibrary.clock.restore(); }); // Works.
2条答案
按热度按时间ars1skjm1#
该问题似乎是在Sinon 12.x之后,未恢复规范文件中的时钟,将其注入全局范围,从而引发上述错误。
因此,修复方法是,根据您使用的是
beforeAll()
还是beforeEach()
,在afterAll()
或afterEach()
中调用clock.restore()
。iq0todco2#
所以,我遇到了这个错误,例如,如果我有两个测试都使用假计时器。你必须调用useFakeTimers独立于你的沙箱创建。
“失败的原因"
如果你在设置沙盒后设置假计时器,然后重新设置它们,它就起作用了。欢迎来到sinon的试错世界。
因为某些原因