Имитация идентификатора, возвращаемого setInterval в тестах JavaScript

Есть ли способ издеваться над идентификатором, который возвращает setInterval(...)?

Некритичные детали для любопытства:

Я тестирую действие преобразователя, которое передает этот идентификатор в глобальное состояние Redux (для сброса интервала позже при другом действии). Поэтому в тестах я хотел бы утверждать, что мое действие было отправлено с точно таким же идентификатором, который был возвращен из setInterval(...).

В настоящее время я использую jest.UseFakeTimers(), но, похоже, нет API для имитации идентификатора интервала, и после просмотра фиктивного хранилища мое действие отправляется с undefined в качестве полезной нагрузки идентификатора интервала.

Не могли бы вы просто смоделировать поддельный setInterval(), который возвращает случайное число, или new Date().getTime()?

Reinstate Monica Cellio 13.07.2018 09:59

Можете ли вы предоставить пару фрагментов кода, которые показывают ваши издевательства и т. д.?

KarlM 15.07.2018 23:23

@KarlM см. Мой собственный ответ на этот вопрос, он предоставляет фрагмент.

wh1t3cat1k 17.07.2018 13:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
604
2

Ответы 2

Если вы назначите setInterval переменной, эта переменная будет содержать идентификатор. Проверьте это с помощью var x = setInterval(() => console.info(x), 500); в консоли. Хотя не уверен, как использовать это с jest.UseFakeTimers ... предположим, что назначение должно быть в обратном вызове.

Я нашел способ сделать это, все еще используя API jest для подделки таймеров.

const expectedIntervalId = 42;
jest.useFakeTimers();
setIntervalMock = (setInterval as jest.Mock);
setIntervalMock.mockImplementation(() => expectedIntervalId);

(NB: я использую TypeScript)

Тогда я могу, например, убедитесь, что clearInterval был вызван с тем же идентификатором, который был возвращен имитируемой функцией.

Другие вопросы по теме