Из официальных документов реакции-маршрутизатора:
Если вы попытаетесь выполнить модульное тестирование одного из ваших компонентов, который отображает или и т. Д., Вы получите некоторые ошибки ипредупреждения о контексте.Хотя у вас может возникнуть соблазн заглушить контекст маршрутизатора самостоятельно, мы рекомендуем вам обернуть свой модульный тест в или .
По этой причине вы получаетеошибка:
You should not use <Route> or withRouter() outside a <Router>
При тестировании компонентов связи их следует обернуть в один из этих маршрутизаторов.
Например:
import { MemoryRouter } from 'react-router-dom';
const wrapper = shallow(<MemoryRouter>
<JobNotFound/>
<MemoryRouter/>);
Кроме того, поскольку выдостигнув дочерних компонентов, попробуйте использовать mount
вместо shallow
.
Обновление:
Следующий тест пройден для меня.
import { Link,MemoryRouter as Router } from 'react-router-dom';
test('simulate the click event on Button', () => {
const onButtonClick = sinon.spy();
const wrapper = mount(<Router><JobNotFound /></Router>);
expect(wrapper.find(Link)).toBeTruthy();
expect(wrapper.find('Link').prop('to')).toEqual('create-job/new');
});