Изменение пути маршрута в MemoryRouter в тестах Enzyme

Я пытаюсь протестировать компонент, который отслеживает изменение истории, создавая оболочку в Enzyme, которая помещает мой компонент в MemoryRouter; то есть:

mount(
  <MemoryRouter initialEntries = {'/path/param1}>
    <Switch>
      <Route
        path = "/path"
        component = {MyComponent}
      />
  </Switch>
</MemoryRouter>
)

Для начального пути это работает нормально, однако я специально хочу проверить, что происходит, когда он начинается, скажем, с /path/param1, но затем история изменяется на /path/param2

Мониторинг пути осуществляется путем упаковки экспорта компонента в withRouter, например:

export default withRouter(MyComponent)

А затем, после создания, я использую history.listen, чтобы подписаться на изменения истории.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
6
0
2 069
1

Ответы 1

Для этого можно использовать базовый компонент <Route> с настраиваемым объектом history.

Сначала установите пакет history (в devDevpendencies, если вы используете его только в тестах).

В вашем тестовом файле:

// we are using memory history only
import { createMemoryHistory } from 'history';
import { Router, Route} from 'react-router-dom';

Затем настройте свой компонент следующим образом: (вы можете отказаться от Switch, если есть только один маршрут)

const history = createMemoryHistory({
  initialEntries: ['/path/param1'],
});

// mount with custom history object
mount(
  <Router history = {history}>
    <Route
      path = "/path"
      component = {MyComponent}
    />
  </Router>
)

Позже в ходе тестирования вы можете проверить, где сейчас находится history после того, как ваш компонент выполнит свою работу.

// check current path has been changed
expect(history.entries[0].pathname).to.eq('/path/param2');

Вы можете найти все остальные материалы, к которым вы можете получить доступ с history, здесь: https://github.com/ReactTraining/history

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