渲染Snackbar会导致单元测试失败

时间:2020-04-23 13:10:09

标签: react-native jestjs react-testing-library react-native-paper

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

任何帮助将不胜感激!

0 个答案:

没有答案