为什么我的测试功能在某些环境中永远不会完成模拟时间?

时间:2017-03-06 09:00:25

标签: javascript sinon chai

我有以下sinon.js / chai.js测试我的javascript类。



 describe('tick', function() {
    beforeEach(function() {
      this.clock = sinon.useFakeTimers();
    });
    afterEach(function() {
      this.clock = sinon.restore();
    });
    it('should increase the time waited for all translators', function() {
      let queue = new TranslatorQueue();
      queue.join("translator1");
      this.clock.tick(1000);
      expect(_.head(queue.queue).timeWaiting).to.equal(1);

      queue.join("translator2");
      this.clock.tick(1000);
      expect(_.head(queue.queue).timeWaiting).to.equal(2);
      expect(_.last(queue.queue).timeWaiting).to.equal(1);
    });
  });




测试在我的开发机器上正常运行,但测试从未完成,并且在尝试在我的登台服务器上运行测试时似乎进入无限循环。我想这与模拟计时器有关,但我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

嗯,通过写出来回答你自己的问题的整个过程似乎在这里起作用了。

为了将来参考,问题是由于sinon.useFakeTimers()比我们可能更喜欢的更为过度。

鉴于我的代码仅使用setInterval(),我可以通过将虚假调用更改为

来运行测试

this.clock = sinon.useFakeTimers("setInterval");

我在此处找到了相关信息:https://github.com/sinonjs/sinon/issues/484

我不能100%确定为什么它可以在我的机器上运行而不是服务器...