Библиотека тестирования реакции — Не удалось найти элемент с данными-testid

#reactjs #react-redux #react-testing-library

Вопрос:

Я следую документам для библиотеки тестирования реакции, чтобы узнать, отображается ли элемент с data-testid атрибутом или нет.

Библиотека тестирования реакции не может найти элемент, даже если он существует.

тест

 test('Renders step based on the active step', () => {
    render(<RenderStep />, { initialState: { implOnboard: initialState } });
  });
  expect(screen.getByTestId('step-1')).toBeDefined(); // 👉 THROWS ERROR ❌
}
 

компонент

  // redux
  const { activeStep } = useSelector((state) => state.implOnboard);

  const renderStep = () => {
    switch (activeStep) {
      case 1:
        console.log('Rendering this 🔥'); // 👈 THIS IS GETTING LOGGED TOO!
        return (
          <div data-testid="step-1">
            <StepOne />
          </div>
        );
      case 2:
        return (
          <div data-testid="step-2">
            <StepTwo />
          </div>
        );
    }
  };
  return <React.Fragment>{renderStep()}</React.Fragment>;
 

ошибка

 TestingLibraryElementError: Unable to find an element by: [data-testid="step-1"]
 

Комментарии:

1. В свой тестовый файл просто добавьте это console.log(screen.debug(null, Infinity)); перед ожиданием и проверьте, правильно ли вы видите, как DOM печатается .

2. Есть ли причина expect , по которой заявление находится за пределами test() блока?

Ответ №1:

Пожалуйста, используйте queryByTestId вместо getByTestId этого для этого случая. Это сработает.

Комментарии:

1. Большое спасибо!!! Ты спас меня. Я потратил на это два дня, не знаю, почему это происходит именно так.

2. И меня тоже спас. Спасибо!!

3. Есть ли причина, по которой он работает с queryByTestId, а не с getByTestId?

Ответ №2:

Добавляя к ответу Елены, нам нужно использовать queryByTestId , потому что, queryByTestId возвращает null значение, а не выдает ошибку в отличие getByTestId от . Вот изображение, которое объясняет, когда следует использовать различные методы.

введите описание изображения здесь

Ссылкаhttps://www.youtube.com/watch?v=Yghw9FkNGsc и список=PL4cUxeGkcC9gm4_-5UsNmLqMosM-dzuvQ и индекс=5 и канал ab_ = TheNetNinja