У меня была эта проблема в прошлом при использовании более старых версий реактивного маршрутизатора, которые я решил использовать: stubRouterContext + хакерский способ доступа экземпляр компонента (с использованием ссылок: https://github.com/reactjs/react-router/issues/1140#issuecomment-113174774)Как протестировать компонент React, который использует контекст, как в response-router 2.0, с Jest 0.8.x
Я думал, что это улучшится в будущем, но я столкнулся с одной и той же стеной с реактивным маршрутизатором 2.0 (я не говорю, что это проблема с реактивным маршрутизатором, но поскольку он использует контекст, это влияет на мои тесты). Таким образом, у меня есть компонент, который использует контекст, чтобы подтолкнуть новое состояние в URL this.context.router.push(...)
который является способом идти https://github.com/reactjs/react-router/blob/master/upgrade-guides/v2.0.0.md#programmatic-navigation
Я говорю jest.dontMock('react-router')
, но мой тест потерпит неудачу с:
TypeError: Cannot read property 'push' of undefined
Это происходит потому, что экземпляр, возвращаемый TestUtils.renderIntoDocument
будет:
context: Object { router: undefined }
Теперь, какова настоящая проблема? Это шутка? Я уверен, что я не единственный, кто сталкивается с этим, и с stubRouterContext он больше не находится в official docs реактивного маршрутизатора, есть ли широкое решение для этого?
Как заставить тест работать? Что в основном имеет правильный контекст и возможность доступа ко всему из экземпляра компонента, возвращаемого TestUtils.renderIntoDocument
.
Я использую реакцию 0.14.7, jest-cli 0.8.2 и реактивный маршрутизатор 2.0.
У меня точно такая же проблема. Я отказался от тестирования PageComponents, потому что накладные расходы больше, чем стоимость, которую они приносят, но я, по крайней мере, хотел бы покрыть мои сухари и навигацию. На данный момент я пытаюсь сделать компонент с помощью TestUtils на основе тестовых маршрутов и объектов местоположения, похоже, является единственным жизнеспособным решением. Что у вас получилось? –