Я пытаюсь понять, как правильно провести модульное тестирование пользовательского метода debounce, который у нас есть:
// function we want to test
function debounce(func, wait = 100) {
let timeout;
return (...args) => {
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(this, args);
}, wait);
};
}
Вот неудачный юнит-тест Jest:
describe('DebounceExample', () => {
beforeAll(jest.useFakeTimers);
afterAll(jest.useRealTimers);
it('should debounce', () => {
// given
const data = 'Chuck Norris is faster than you think';
const debounceTime = 5000;
const callback = jest.fn();
const debouncedFunction = debounce(callback, debounceTime);
// when
debouncedFunction(data);
// then
expect(callback).not.toHaveBeenCalled();
// when
jest.runAllTimers(); // jest.advanceTimersByTime(debounceTime);
// then
expect(callback).toHaveBeenCalled();
});
});
Отказ:
Error: expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0 Jest
Я также пробовал решение здесь: https://stackoverflow.com/a/52638566/704681 безуспешно
Обходной путь: единственный способ проверить это пока:
it('should denounce - workaround', (done) => {
// given
const data = 'Chuck Norris is faster than you think';
const debounceTime = 5000;
const callback = jest.fn((param) => {
// then
expect(param).toEqual(data);
done();
});
const debouncedFunction = debounce(callback, debounceTime);
// when
debouncedFunction(data);
// then
expect(callback).not.toHaveBeenCalled();
// when (see 'then' inside callback implementation)
jest.runAllTimers(); // jest.advanceTimersByTime(debounceTime);
});
jest.advanceTimersByTime is not a function
: codeandbox.io/s/jest-example-j72xu - person A. Masson   schedule 04.11.2020Jest
функции поддерживаются, напримерrunAllTimers
. Однако вы можете скачать пример и использоватьnpm run test
- person A. Masson   schedule 04.11.2020should denounce - workaround
работает, теперь вопрос в том, почему я получаюReceived number of calls: 0
наshould debounce
тесте ... - person A. Masson   schedule 06.11.2020Node
версия? Использованиеv12.18.3
- person A. Masson   schedule 06.11.2020v14.13.1
- person tmhao2005   schedule 06.11.2020