Рендеринг Snackbar приводит к сбою модульных тестов - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть простой модульный тест, который я пытаюсь настроить с помощью библиотеки 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, но я не могу заставить его работать правильно в этом случае.

Любая помощь будет оценена!

...