У меня есть контейнер React с вложенным запросом внутри мутации.Я могу проверить, что первоначальный рендер работает, используя MockedProvider
для прохождения через смоделированные ответы для Mutation
и Query
.
Например, при начальном рендеринге я высмеиваю запрос на возврат сообщения, например "TEST MESSAGE" .
Когда я нажимаю кнопку внутри MyComponent
, она вызывает mutationFn()
, я проверил это с console.log, но Query
не рендерится с новым сообщениемкак 'null'
Я хотел бы убедиться, что при нажатии кнопки вызывается обновление реквизита дочернего компонента из Query
или функция возврата Mutation
.Как это возможно с помощью Jest?
Тест (упрощенный):
it('should pass message to message component', async (done)
=> {
await new Promise((resolve) => setTimeout(resolve));
comp.update();
comp.find('Button').simulate('click');
await new Promise((resolve) => setTimeout(resolve, 10));
comp.update();
expect(comp.find(MyComponent.props('message')).toBeNull();
done();
});
Контейнер реагирования (упрощенный):
class MyContainer extends PureComponent {
public render() {
return (
<Mutation mutation={MY_MUTATION}>
{(mutationFn) => {
return (
<Query query={MY_QUERY}>
{({ data, loading, error }: QueryResult<IAppUIQuery>) => {
if (loading || error || !data || !data.appUI || !data.myQuery.message) {
return null;
}
const message = data.myQuery.message;
return (
<MyComponent
message={message}
closeButtonClick={this.createCloseButtonHandler(mutationFn)}
/>
);
}}
</Query>
);
}}
</Mutation>);
}
private createCloseButtonHandler = (mutationFn: MutationFn<null, IVars>) => {
return () => {
mutationFn({ variables: { message: null } });
};
}
Есть ли способзаставить Query
перерисовать при клике?Или есть способ шпионить за mutationFn()
?