Как восстановить глобальный метод после теста в Jest?

Друзья,

В Jest если сделать так: Date.now = jest.fn().mockReturnValue(1000); внутри одного test(...), то во всех последующих test(...) вызов Date.now() так и будет возвращать 1000, вместо результата работы оригинального метода Date.now().

Есть четыре опции Jest:
  1. clearMocks
  2. resetMocks
  3. resetModules
  4. restoreMocks


Ни одна из них ожидаемого результата не приносит. Одна лишь сбрасывает такие методы, но вместо родной реализации они начинают возвращать undefined, т.е. нормальной даты на выходе больше не будет.

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

Насколько я понимаю, под каждый тест должно настраиваться окружение, т.е. каждый тест должен быть в песочнице, но пока таких опций в Jest не нашел (extraGlobals похоже, но не оно, насколько я понимаю).
  • Вопрос задан
  • 74 просмотра
Решения вопроса 1
yakimchuk-ry
@yakimchuk-ry Автор вопроса
Нашел ответ чисто случайно. Каждый файл тестов запускается в Jest в отдельном контексте VM, поэтому мутация глобальных переменных работает только в рамках файла, поэтому это НЕ проблема, это никак не влияет на тесты вне текущего файла.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Dasslier
FrontEnd Developer
Скопируйте Date в другую переменную и используйте ее. Зачем перезаписывать глобальный метод?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы