Издеваться над текущим временем в Синоне - PullRequest
0 голосов
/ 07 января 2020

Я пишу интеграционные тесты для моего приложения, которое использует соединения с MongoDB. Я записываю время создания сущности в БД и использую для этого Date.now(). Мое приложение чувствительно ко времени, и поэтому я хочу высмеивать текущее время так, чтобы мои тесты всегда работали. Я пробовал примеры, которые делятся на нескольких других похожих постах, но не могу найти для меня работающее решение.

Я пытаюсь добавить

const date = new Date()
date.setHours(12)
sandbox.stub(Date, "now").callsFake(function() {return date.getTime()})

в мой метод beforeEach, но это никак не влияет .

Я также пытался

const date = new Date()
date.setHours(12)

sinon.useFakeTimers({
    now: date,
    shouldAdvanceTime: true
})

Но это выдает мою проверку goose схемы mon для броска и выдает

Неправильная конфигурация схемы: ClockDate недопустимый тип в пути createdDate

Каков правильный путь для достижения этого?

Ответы [ 2 ]

1 голос
/ 18 января 2020

Использование useFakeTimers делало то, что намеревалось сделать. Однако сравнение типов mon goose не удалось, так как сравнение типов выполняется путем проверки имен. Решение оказалось добавить ClockDate как известный тип в mon goose внутри песочницы.

Добавление следующей строки в методе before сработало.

import { SchemaTypes } from "mongoose"
SchemaTypes["ClockDate"] = SchemaTypes.Date
0 голосов
/ 08 января 2020

Вот способ сделать заглушку для Date.now():

main.ts:

export function main() {
  return Date.now();
}

main.test.ts:

import { main } from "./main";
import sinon from "sinon";
import { expect } from "chai";

describe("59635513", () => {
  afterEach(() => {
    sinon.restore();
  });
  it("should pass", () => {
    const mDate = 1000 * 1000;
    const dateNowStub = sinon.stub(Date, "now").returns(mDate);
    const actual = main();
    expect(actual).to.be.eq(mDate);
    sinon.assert.calledOnce(dateNowStub);
  });
});

Юнит-тест результаты с отчетом о покрытии:


  59635513
    ✓ should pass


  1 passing (8ms)

--------------|----------|----------|----------|----------|-------------------|
File          |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
--------------|----------|----------|----------|----------|-------------------|
All files     |      100 |      100 |      100 |      100 |                   |
 main.test.ts |      100 |      100 |      100 |      100 |                   |
 main.ts      |      100 |      100 |      100 |      100 |                   |
--------------|----------|----------|----------|----------|-------------------|

Исходный код: https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/59635513

...