#javascript #reactjs #testing #jestjs #enzyme
#javascript #reactjs #тестирование #jestjs #фермент
Вопрос:
Я хочу написать тест моментального снимка для своего Footer
компонента, но он выдает ошибку: You should not use <Link> outside a <Router>
. Вот мой код:
import React from 'react'
import renderer from 'react-test-renderer'
import Footer from '../footer'
it('Footer renders correctly', () => {
const tree = renderer
.create(<Footer />)
.toJSON()
expect(tree).toMatchSnapshot()
})
Я знаю, что это происходит потому, что Footer
компонент использует Link
from react-router-dom
. Чтобы решить эту проблему, я завернул Footer
компонент в BrowserRouter
:
const tree = renderer
.create(
<BrowserRouter>
<Footer />
</BrowserRouter>
)
.toJSON()
но теперь он выдает ошибку: Browser history needs a DOM
Ответ №1:
Я использовал MemoryRouter
вместо BrowserRouter
, и это решило проблему.
import React from 'react'
import { MemoryRouter } from 'react-router-dom'
import renderer from 'react-test-renderer'
import Footer from '../footer'
it('Footer renders correctly', () => {
const tree = renderer
.create(
<MemoryRouter>
<Footer />
</MemoryRouter>
)
.toJSON()
expect(tree).toMatchSnapshot()
})
Комментарии:
1. Если у кого-то все еще возникают проблемы из-за несоответствия ключей в моментальном снимке. Вы можете следовать этому примеру и добавить
initialEntries={[ { pathname: '/', key: 'testKey' } ]}
orkeyLength={0}
в MemoryRouter