我有一个简单的单元测试,我正在尝试使用 Jest 和 React 测试库进行设置,单击一个按钮以<Snackbar />
从react-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
但在这种情况下我似乎无法让它正常工作。
任何帮助,将不胜感激!