#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 тоже, но на самом деле это не так. Всегда проверяйте свои данные.