Испытание проблемы, если внутренняя функция вызывается с использованием Jest / Enzyme - PullRequest
0 голосов
/ 11 марта 2020

Функция, которую я пытаюсь проверить, приведена ниже. Мы используем подход, похожий на конструктор, для сборки наших сложных структур URL, чтобы помочь перемещаться по нашему веб-приложению.

import { useNavigation } from '../../../blah';

useNavigation().goBack();

Вызвана полная функция, которую я пытаюсь проверить, ниже

export const useNavigation = (path) => {
  const { view } = store.getState();

  const withQueryParams = (params = {}) => {
    const paramString = addQueryStringParameters(params);
    return useNavigation(`${path}${paramString}`);
  };

  const tlo = (id) => useNavigation(`/${id}/${id}${path}`);

  const site = (id) => useNavigation(`/${view.activeTLO.id}/${id}${path}`);

  const current = () => useNavigation(`/${view.activeTLO.id}/${view.activeSite.id}${path}`);

  const navigate = () => history.push(path);

  const goBack = () => history.goBack();

  return {
    withQueryParams,
    tlo,
    site,
    current,
    navigate,
    path,
    goBack,
  };
};

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

I Я импортирую и высмеиваю эту функцию следующим образом:

import * as navigateTo from '../../../lib/navigateTo';

navigateTo.useNavigation = jest.fn(() => ({
  goBack: jest.fn(),
}));

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

Нижеприведенное ожидание работает так, как он может видеть, что navigateTo.useNavigation был вызван, но со всеми усилиями я не могу проверить, вызывается ли navigateTo.useNavigation.goBack как всегда неопределенный.

it('renders the navigate to the orders page', () => {
  const actions = availableOrderActions(settings).find((action) => action.label === 'Supplier Orders');
  actions.clickHandler();

  expect(navigateTo.useNavigation).toHaveBeenCalled();
});

Любая помощь в этом будь велик в своих реальных проблемах, с которыми многие сталкиваются, когда дело касается модульного тестирования.

Заранее спасибо, Крис

1 Ответ

0 голосов
/ 11 марта 2020

Похоже, так вы издеваетесь над подобными вещами.

import * as navigateTo from '../../../lib/navigateTo';

const goBack = jest.fn();
navigateTo.useNavigation = jest.fn(() => ({
  goBack,
}));

it('renders the navigate to orders page', () => {
   const actions = availableOrderActions(settings).find((action) => action.label === 'Buyer Orders');
   actions.clickHandler();
   expect(navigateTo.useNavigation).toHaveBeenCalled();
   expect(goBack).toHaveBeenCalled();
});
...