Передача переменной в качестве аргумента в getByText из библиотеки тестирования react не работает

#reactjs #unit-testing #react-testing-library

#reactjs #модульное тестирование #react-testing-library

Вопрос:

Если вы передаете строковый литерал в getByText из библиотеки тестирования react, он работает нормально

 getByText('my text')
  

но если вы передаете ту же строку в качестве переменной, она ничего не находит

 const text: string = 'my text'
getByText(text) // this returns no match even though with literal it worked fine
  

в чем может быть проблема?

 test('page displays users activities on load', async () => {
    const history = createMemoryHistory();
    const {getByText} = render(
        <Router history={history}>
            <Dashboard />
        </Router>
    )

    await waitFor(() => getByText("Programovanie v jazyku C", {exact: false}))

    activityData.forEach((activity) => {
        expect(getByText(activity.title, {exact: false})).toBeTruthy()
    })
})
  

Редактировать: добавлен мой код

Панель мониторинга компонентов содержит таблицы, которые заполняются из mock api. Данные Mock api — это те же данные, activityData что и . Wait for вызывается со строковым литералом, заголовком первого элемента activityData . Это работает нормально. Но это не работает, когда вызывается с переменной.

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

1. Это должно работать нормально, не могли бы вы опубликовать более подробную информацию о своем наборе тестов?

2. Отредактированный вопрос, чтобы включить мой код. При использовании переменной возникает ошибка » TestingLibraryElementError: не удается найти элемент с текстом: Программирование на языке C. Это …. » Но, как вы видите в коде, когда я использую строковый литерал «Программирование на языке C», он работает нормально

3. Спасибо за обновление. Не могли бы вы попробовать воспроизвести в codesandbox ?

Ответ №1:

Проблема заключалась в данных, которые я передавал через свой макет службы. Он был скопирован из консоли Chrome и после копирования содержал символы в форме » 8ief2″, которые на консольной печати выглядели как обычные символы и, вероятно, в html тоже, но на самом деле это не так. Всегда проверяйте свои данные.