NodeJS Sinon:不能在同一个全局对象上安装两次假计时器

but5z9lq  于 2022-12-03  发布在  Node.js
关注(0)|答案(2)|浏览(130)

我们已经在很多规格文件中使用useFakeTimers()(sinon v11.x)很长时间了。最近,我们更新了sinon到14.x版本,现在测试失败了,错误如下。
TypeError:无法在同一全局对象上安装两次伪计时器。
我们也试过使用createSandbox(),但没有帮助。

ars1skjm

ars1skjm1#

该问题似乎是在Sinon 12.x之后,未恢复规范文件中的时钟,将其注入全局范围,从而引发上述错误。
因此,修复方法是,根据您使用的是beforeAll()还是beforeEach(),在afterAll()afterEach()中调用clock.restore()

iq0todco

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.

相关问题