Jest 快照测试错误:您不应在 <Router> 之外使用 <Link>

kax*_*993 3 javascript testing reactjs jestjs enzyme

我想为我的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()
})
Run Code Online (Sandbox Code Playgroud)

我知道发生这种情况是因为Footer组件使用Linkfrom react-router-dom. 为了解决这个问题,我将Footer组件包装在BrowserRouter

const tree = renderer
    .create(
        <BrowserRouter>
            <Footer />
        </BrowserRouter>
    )
    .toJSON()
Run Code Online (Sandbox Code Playgroud)

但现在它抛出错误:Browser history needs a DOM

kax*_*993 7

我使用了MemoryRouterBrowserRouter,它解决了问题。

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()
})

Run Code Online (Sandbox Code Playgroud)