У меня есть несколько компонентов, которые используют один крючок useParams
. Документы-шутки предлагают использовать jest.mock
для репликации этого хука. Как вы понимаете, написание этого макета над пространством нескольких файлов может раздражать, и поэтому я стараюсь использовать ручные макеты. В документации Jest предлагается создать каталог __mocks__
рядом с файлом, который я буду издеваться - в данном случае это react-router-dom.js
в node_modules
. Я следовал указаниям документации, но мои тесты все еще терпят неудачу, потому что они не могут найти нигде определенное useParams
. Пример:
src / components / compOne. js:
import React from 'react'
import styled from 'styled-components'
import { useParams } from 'react-router-dom'
const Wrapper = styled.div``
export default function CompOne() {
const { id = '123' } = useParams()
return (
<Wrapper>
<h2>{`ID: ${id}`}</h2>
</Wrapper>
)
}
src / __ tests __ / compOne. js:
import React from 'react'
import CompOne from '../components/compOne.js'
import { shallow } from 'enzyme'
jest.mock('react-router-dom')
test('renders without crashing', () => {
shallow(<CompOne />)
})
root / __ mocks __ / response-router-dom. js:
jest.mock('react-router-dom', () => {
useParams: () => ({
id: 'MOCKED_VALUE',
})
})
Вот как тесты терпят неудачу:
src/__tests__/compOne.js
● renders without crashing
TypeError: (0 , _reactRouterDom.useParams) is not a function
6 |
7 | export default function CompOne() {
> 8 | const { id } = useParams()
| ^
9 | return (
10 | <Wrapper>
11 | <h2>{`ID: ${id}`}</h2>
at CompOne (src/components/navigator/pages/compOne.js:8:28)
at ReactShallowRenderer.render (node_modules/react-test-renderer/cjs/react-test-renderer-shallow.development.js:829:32)
at fn (node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:645:55)
at withSetStateAllowed (node_modules/enzyme-adapter-utils/src/Utils.js:99:18)
at Object.render (node_modules/enzyme-adapter-react-16/src/ReactSixteenAdapter.js:645:20)
at new ShallowWrapper (node_modules/enzyme/src/ShallowWrapper.js:411:22)
at shallow (node_modules/enzyme/src/shallow.js:10:10)
at Object.<anonymous> (src/__tests__/compOne.js:8:5)
Если вам интересно узнать о структуре проекта, обратитесь к типичной структуре create-react-app - где myapp/
означает root/
Any помощь будет очень признательна. Заранее спасибо!