У меня есть простой модульный тест, который я пытаюсь настроить с помощью библиотеки Jest and React Testing Library, которая нажимает кнопку, чтобы отобразить <Snackbar />
из Reaction-native-paper , проблема, с которой я сталкиваюсь Имея в виду, что, как только Snackbar становится видимым, мои тесты заканчиваются тайм-аутом, я предполагаю, что из-за duration
проп, который автоматически отклоняет компонент Snackbar по таймауту.
const Component = props => {
const [snackbarVisible, setSnackbarVisible] = useState(false)
const onClick = (): void => {
setSnackbarVisible(true)
props.saveHandler()
}
return (
<>
<Button mode="contained" onPress={onClick}>
Save
</Button>
<Snackbar
visible={snackbarVisible}
onDismiss={() => setSnackbarVisible(false)}
duration={5000}
action={{
label: 'Dismiss',
onPress: () => setSnackbarVisible(false)
}}
>
Saved!
</Snackbar>
</>
)
}
Мой тест выглядит следующим образом:
it('saves the cabinet', async () => {
const saveHandler = jest.fn()
jest.useFakeTimers()
const {getByText} = render(<Component saveHandler={saveHandler} />)
fireEvent.press(getByText('Save'))
fireEvent.press(getByText('Dismiss'))
// This was removed from the example for simplicity.
expect(saveHandler).toBeCalledTimes(1)
})
Сохранение этого значения приводит к истечению времени ожидания теста со следующей ошибкой. Удаление Snackbar
дает тестам реальный сбой.
FAIL src/views/CabinetView/CabinetView.test.tsx
● Test suite failed to run
Call retries were exceeded
Я пытался использовать несколько вариантов useFakeTimers
, но я не могу заставить его работать правильно в этом случае.
Любая помощь будет оценена!