Я вижу довольно много похожих вопросов, но все они кажутся сильно устаревшими или невероятно запутанными.
У меня есть компонент React, который содержит компонент React Router Link
, например:
export default class Home extends Component {
render() {
return (
<div className="Home">
<Link to="/mission">Begin</Link>
</div>
);
}
}
Затем я пытаюсь очень просто проверить, что компонент Home
содержит компонент Link
, который имеет свойство to=/mission
, используя Jest. Итак, согласно Testing React Документация по маршрутизатору, я перепробовал множество вариантов тестов, но этот код наиболее кратко демонстрирует, чего я пытаюсь достичь (в примере используется jest-фермент для краткости):
it('includes link to Mission scene', () => {
const home = shallow(<MemoryRouter><Home /></MemoryRouter>);
expect(home).toContainReact(<Link to="/mission">Begin</Link>)
});
Очевидно, что в этом коде есть несколько проблем, не последней из которых является ошибка:
Warning: Failed context type: The context `router` is marked as required in `Link`, but its value is `undefined`.
Но обратите внимание на ключевые моменты: я хочу неглубоко визуализировать (если возможно) компонент Home
, чтобы протестировать этот компонент изолированно. В то же время я пытаюсь обернуть это в MemoryRouter
или каким-то образом получить контекст, чтобы я мог протестировать Link
компоненты.
Проницательные потенциальные респонденты заметят, что эта проблема фактически предотвращает все изолированные тесты этого компонента (а не только тесты, связанные с React Router), потому что я вообще не могу выполнить поверхностный рендеринг компонента.