1

我有一个简单的单元测试,我正在尝试使用 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但在这种情况下我似乎无法让它正常工作。

任何帮助,将不胜感激!

4

0 回答 0