Подтвердить что ты не робот

Как заблокировать новую дату() с помощью синона?

Я хочу проверить, что различные поля даты были правильно обновлены, но я не хочу возиться с предсказанием при вызове new Date(). Как удалить конструктор Date?

import sinon = require('sinon');
import should = require('should');

describe('tests', () => {
  var sandbox;
  var now = new Date();

  beforeEach(() => {
    sandbox = sinon.sandbox.create();
  });

  afterEach(() => {
    sandbox.restore();
  });

  var now = new Date();

  it('sets create_date', done => {
    sandbox.stub(Date).returns(now); // does not work

    Widget.create((err, widget) => {
      should.not.exist(err);
      should.exist(widget);
      widget.create_date.should.eql(now);

      done();
    });
  });
});

В случае, если это актуально, эти тесты выполняются в приложении node, и мы используем TypeScript.

4b9b3361

Ответ 1

Я подозреваю, что вы хотите useFakeTimers:

var now = new Date();
var clock = sinon.useFakeTimers(now.getTime());
//assertions
clock.restore();

Это простой JS. Рабочий пример TypeScript/JavaScript:

var now = new Date();

beforeEach(() => {
    sandbox = sinon.sandbox.create();
    clock = sinon.useFakeTimers(now.getTime());
});

afterEach(() => {
    sandbox.restore();
    clock.restore();
});