Компонент, который я пытаюсь протестировать, имеет состояние isSubmitting
, которое устанавливается в значение true, когда мы пытаемся отправить форму, а затем устанавливается в значение false, когда мы получаем ответ от сервера.
Я хочу проверить состояние компонента после каждого обновления состояния.
const Component = () => {
const [isSubmitting, setIsSubmitting] = useState();
const handlePress = async () => {
setIsSubmitting(true);
await submitForm();
setIsSubmitting(false);
};
return (
<>
<button onPress={() => this.handlePress} />
{isSubmitting && <IsSubmitting />}
</>
)
}
Я могу проверить только состояние первого компонента, например. когда я обновляю isSubmitting до true.
import React from 'react';
import { act, create } from 'react-test-renderer';
import Component from './Component';
it('shows loading screen after submit, and hides it after', async () => {
jest.spyOn(form, 'submitForm').mockResolvedValue();
const wrapper = create(<Component />);
act(() => {
wrapper.root.findByType(Button).props.onPress();
});
expect(wrapper.root.findByType(IsSubmitting)).toBeDefined();
});
Как я могу проверить, что компонент IsSubmitting впоследствии скрыт? Я также получаю сообщение об ошибке, не включив обновление в act ().
console.error node_modules/react-test-renderer/cjs/react-test-renderer.development.js:104
Warning: An update to Component inside a test was not wrapped in act(...).
When testing, code that causes React state updates should be wrapped into act(...):
act(() => {
/* fire events that update state */
});
/* assert on the output */
This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/docs/test-utils.html#act
in Component