我有一个简单的单元测试,我正在尝试使用Jest和React Testing Library进行设置,单击一个按钮以使react-native-paper中出现一个<Snackbar />
,我遇到的问题是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
的多种变体,但在这种情况下似乎无法正常工作。
任何帮助将不胜感激!