Как протестировать роутер 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 вне браузера, но я не понимаю, как правильно его протестировать, так как я не хочу заставлять себя манипулировать кодом, чтобы соответствовать недостаткам тестовой среды.

Я искал в Интернете и смотрю на подобные проблемы, но не могу найти ответ, и документы предлагают мало, если не полезной информации, чтобы справиться с этим.

Любая помощь будет оценена по достоинству. Спасибо!

0 ответов

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