Ошибка тестирования Jest snapshot: вы не должны использовать вне

#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' } ]} or keyLength={0} в MemoryRouter