Как высмеивать разные значения useLocation для каждого теста? - PullRequest
0 голосов
/ 26 апреля 2020

Мой компонент реагирования должен внести некоторые изменения в состояние в соответствии с текущим местоположением.

Существует пользовательский хук, который вызывается при загрузке компонента. В хуке есть проверка useLocation().pathname и результат в switch / case для правильного изменения.

Может ли это быть проверено Jest в одном файле / описании? Я пытался jest.mock useLocation, но я просто не могу сделать это внутри описания Jest ...

Это макет, в настоящее время не описанный - и это работает, но не может быть изменено от теста к тесту:

const mockUseLocation = () => {
    jest.mock('react-router-dom', () => ({
        useLocation: jest.fn().mockReturnValue({
            pathname: '/val1'
        })
    }))
};

Как проверить все ветви переключателей / корпусов?

switch (pathname) {
   case 'val1':
       return 100;
   case 'val2':
       return 200;
   ...
   ...
}

1 Ответ

0 голосов
/ 26 апреля 2020

Самый простой способ - использовать MemoryRouter вместо насмешки useLocation. Также это будет полезно, если ваш компонент имеет <Link> (в противном случае вы получите ошибку «Ссылка не может быть использована вне маршрутизатора»). Также это позволяет вам проверить, происходит ли навигация. Так что с таким большим количеством преимуществ насмешка useLocation напрямую не имеет никакого значения.

Взгляните на примеры в официальных документах. Это было бы что-то похожее:

test("current user is active in sidebar", () => {
  const wrapper = mount(
    <MemoryRouter initialEntries={["/users/2"]}>
      <YourComp />
    </MemoryRouter>
  );
  expected(wrapper.find(User)).toHaveLength(2);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...