Ваша внутренняя функция () =><SomeChildComponent />
никогда не выполнялась, поэтому ваш тест говорит правду о том, что SomeChildComponent
не существует.Вам просто нужно позвонить (обратите внимание на дополнительные скобки):
export class ParentComponent extends React.Component {
render() {
return (<Loader loading={false}>
{ (() =><SomeChildComponent />)()}
</Loader>);
}
}
Мы можем реорганизовать его в более render-props way:
export class ParentComponent extends React.Component {
render() {
return (<Loader loading={false}>
{ this.props.render()}
</Loader>);
}
}
И затем изменитьтест соответственно:
const render = () => <SomeChildComponent />;
const wrapper = shallow(
<ParentComponent render={render} />
);
Однако этот тест на самом деле не становится unit
тестом, поскольку он тестирует более одного компонента одновременно.Чтобы избавиться от этой зависимости, мы можем просто проверить, вызван ли render()
:
const renderMock = jest.fn();
const wrapper = shallow(<ParentComponent render={ renderMock } />);
expect(wrapper.find('Loader').exists()).toBeTruthy();
expect(renderMock).toHaveBeenCalled();
Если ваш render()
принимает некоторые аргументы, вы можете рассмотреть возможность использования .toHaveBeenCalledWith