sinon.useFakeTimers()可以存根全局Date构造函数new Date()

sandbox.useFakeTimers有哪些用途和用例?

从文档


  伪造计时器并将时钟对象绑定到沙箱,以便在调用sandbox.restore()时也将其还原。通过sandbox.clock访问


仍不清楚如何使用第二种方法。

new Date()中的SUT仍返回原始时间戳

最佳答案

这个想法不是要替换日期。这是为了避免等待docs中所说的setTimout:


  假计时器是setTimeout和朋友的同步实现
  Sinon.JS可以覆盖全局函数,从而使您能够
  使用它们更轻松地测试代码


这是有关如何使用它的示例:

var assert = require('assert');
var sinon = require('sinon');

var executed = false;

function doSomething() {
    setInterval(function() {
        executed = true;
    }, 10000);
}

describe('doSomething', function() {

  beforeEach(function() {
    this.clock = sinon.useFakeTimers();
  });

  afterEach(function() {
    this.clock = sinon.restore();
  });

  it('should execute without waiting on the timeout', function(){
    doSomething();
    this.clock.tick(10001);
    assert.equal(executed, true);
  });

});


在此示例中,函数doSomething将在10000毫秒后执行。不必等待声明测试,而是通过使用this.clock.tick(10001)模拟时间通过,然后断言测试正在通过。

关于javascript - sandbox.useFakeTimers用例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35774627/

10-11 20:33