Как вы смеетесь над lodash debounce.cancel с шуткой? - PullRequest
1 голос
/ 25 марта 2019

Ищите несколько рекомендаций о том, как смоделировать метод .cancel в ответе от lodash.

У меня есть функция, которая вызывает debounce, а затем использует возвращаемое значение debounce для вызова debouncedThing.cancel().

Я могу просто смоделировать debounce в своих тестах, за исключением случаев, когда моя функция называется .cancel().

В верхней части моих модульных тестов, которые я сейчас выполняю:

jest.mock('lodash/debounce', () => fn => fn));

Приведенный выше макет работал нормально, за исключением того места, где я звоню debouncedThing.cancel(). В этом тесте я получаю ошибку, что debouncedThing.cancel() не является функцией.

Код Psuedo, где я использую debounce, выглядит следующим образом:

const debouncedThing = debounce(
  (myFunc, data) => myFunc(data),
  DEBOUNCE_DELAY_TIME,
);

const otherFunc = () => {
 /* omitted */
 debouncedThing.cancel();
}

1 Ответ

0 голосов
/ 26 марта 2019

Вам просто нужно добавить функцию cancel к fn:

jest.mock('lodash/debounce', () => fn => {
  fn.cancel = jest.fn();
  return fn;
});

Пример использования:

const debounce = require('lodash/debounce');

test('debouncedThing', () => {
  const thing = jest.fn();
  const debouncedThing = debounce(thing, 1000);

  debouncedThing('an arg');
  expect(thing).toHaveBeenCalledWith('an arg');  // Success!

  debouncedThing.cancel();  // no error
  expect(debouncedThing.cancel).toHaveBeenCalled();  // Success!
});
...