Как протестировать роутер React без ошибок?
Я реализовал компонент App, который содержит Route с использованием React и React:
import {
BrowserRouter as Router,
Route
} from 'react-router-dom';
import createHeader from './components/header/header';
import createLandingPage from './components/landing-page/landing-page';
import createFooter from './components/footer/footer';
export default React => () => {
const Header = createHeader(React);
const LandingPage = createLandingPage(React);
const Footer = createFooter(React);
return (
<section id="sectionId">
<Header />
<Router>
<Route exact path="/" component={LandingPage} />
</Router>
<Footer />
</section>
);
};
Само приложение отображается и работает должным образом, так как я могу зайти в свой браузер и увидеть все как положено.
Проблема возникает, когда я пытаюсь реализовать правильное тестирование, которое выполняется в Node.js без браузера:
import test from 'tape';
import dom from 'cheerio';
import React from 'react';
import reactDom from 'react-dom/server';
import { MemoryRouter } from 'react-router';
import createApp from './app';
const render = reactDom.renderToStaticMarkup;
test('App init & render', assert => {
const message = 'It sohuld initialize and render the app.';
const App = createApp(React);
const $ = dom.load(render(
<MemoryRouter>
<App />
</MemoryRouter>
));
const output = $('#jptv').length;
const actual = output > 0;
const expected = true;
assert.equal(actual, expected, message);
assert.end();
});
я использовал MemoryRouter
чтобы обернуть мое приложение, как указано в React docs, чтобы избежать ошибок, но с или без него у меня возникает та же ошибка при запуске теста в консоли:
Нарушение Инварианта: история браузера нуждается в DOM
Я предполагаю, что я не могу запустить компонент, используя BrowserRouter
вне браузера, но я не понимаю, как правильно его протестировать, так как я не хочу заставлять себя манипулировать кодом, чтобы соответствовать недостаткам тестовой среды.
Я искал в Интернете и смотрю на подобные проблемы, но не могу найти ответ, и документы предлагают мало, если не полезной информации, чтобы справиться с этим.
Любая помощь будет оценена по достоинству. Спасибо!