Фиктивная дата с двумя или более тестами - PullRequest
0 голосов
/ 16 октября 2018

Мы используем шутку для насмешек.У меня есть функция, которая будет приветствовать нас в зависимости от времени, когда файл выглядит следующим образом:

export default function getGreetingMessage() {
  const today = new Date();
  const curHr = today.getHours();

  if (curHr < 12) {
      return 'Good morning';
  } else if (curHr < 18) {
      return 'Good afternoon';
  }
  return 'Good evening';
}

И мой тестовый файл будет выглядеть ниже

import getGreetingMessage from '../messages';

describe('messages', () => {
 function setup(date) {
  const DATE_TO_USE = new Date(date);
  global.Date = jest.fn(() => DATE_TO_USE);
 }
 it('should return good afternoon when time is greater than 12', () => {
  setup('Tue Oct 16 2018 15:49:11');
  expect(getGreetingMessage()).toEqual('Good afternoon');
});

it('should return good morning when time is less than 12', () => {
  setup('Tue Oct 16 2018 10:49:11');
  expect(getGreetingMessage()).toEqual('Good morning');
});

it('should return good evening when time is greater than than 19', () => {
  setup('Tue Oct 16 2018 19:49:11');
  expect(getGreetingMessage()).toEqual('Good evening');
});
});

Когда я запускаю каждый тест по отдельностиработает нормальноКогда я запускал все за раз, тогда тесты не проходили.

Я попытался сбросить шутку.Но не работает.

Есть ли другие способы попробовать?

Заранее спасибо :)

1 Ответ

0 голосов
/ 16 октября 2018

Это плохая практика назначать макет глобалу, потому что он не может быть очищен:

global.Date = jest.fn(() => DATE_TO_USE);

Unmocked Date не будет доступен при последующих setup вызовах:

const DATE_TO_USE = new Date(date);

Нет необходимости указывать реализацию jest.fn, ее можно изменить для каждого теста.Поскольку это Date ожидаемый объект, для создания экземпляров можно использовать исходный Date:

const OriginalDate = Date;

beforeEach(() => {
  jest.spyOn(global, 'Date');
});

it('', () => {
  Date.mockImplementation(() => new OriginalDate('Tue Oct 16 2018 15:49:11'));
  expect(getGreetingMessage()).toEqual('Good afternoon');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...