С тех пор, как я узнал о функциональных компонентах в React, мне нравится разбивать функции внутри компонента на более мелкие компоненты, насколько это возможно. Но это представляет проблему во время модульного тестирования с помощью Jest.
Это простая версия того, что я sh тестирую:
//Big.js
export default function Big({ param }){
return(
<div>
<Small name={param}/>
</div>
);
}
//I don't usually export smaller components because they will only be used in this file, but I have to for testing purposes
export const Small = ({ name }) => {
return <span>Hello {name}</span>
}
Сейчас я тестирую Big.js
и я хочу высмеять Small
и, возможно, протестировать его позже отдельно. Возможно ли это?
Я пробовал это:
//Big.test.js (contained in a folder which is in the same directory as Big.js
import Big from '../Big'
jest.mock('../Big', () => {
const actual = jest.requireActual('../Big')
return {
...actual,
Small: ({ name }) => <span>{name}</span>
}
})
...
it('test', async() => {
act(() => { <Big param="John"/> });
})
Это вызывает ошибку:
Error type is invalid: expected a string (for built-in components) or a class/function (for components) but got: object.
Итак, мой вопрос: как мне высмеять Small
компонент, если возможно?