Реагировать vitest innerHTML на Equal
Я пытаюсь протестировать Reactnode с реакцией, vitest и библиотекой тестирования.
Но форматирование из innerHTML не будет совпадать. Как я могу избежать форматирования для тестовых случаев?
- Expected - 3
+ Received + 1
- <div>
- content
- </div>
+ <div>content</div>
Вот мой тестовый код
const content: ReactElement = (<div>content</div>);
makeSUT('title 2', content);
const contentResult = await screen.findByTestId('modal-content');
expect(contentResult).toBeInTheDocument();
expect(contentResult.innerHTML).toEqual(content);
Спасибо
1 ответ
Как вы можете видеть, использование таким образом может быть ненадежным и давать сбои из-за чего-то такого простого, как разница в новых строках, а это не то, как вы хотите тестировать свои приложения, и не имеет отношения к тому, правильно ли они работают.
Вместо того, чтобы сравнивать
innerHTML
из двух
<div>
элементов, чтобы включить их семантические теги, я рекомендую использовать
findByText
чтобы определить, существует ли текст в документе.
Например:
const contentWrapper = screen.getByTestId('custom-element');
const contentResult = screen.findByText('content');
// If the component with the test id is in the document, it rendered
expect(contentWrapper).toBeInTheDocument();
// contentResult will not be find the text if it is not there and this will fail
expect(contentResult).to.exist;
На самом деле, приведенные выше утверждения являются избыточными, поскольку «контента» не будет в документе, если компонент не отобразится, и будет выдано сообщение об ошибке, если текст не найден (как в утверждении, так и из-за того, как работает.
Пример:
const contentResult = screen.findByText('content');
expect(contentResult).to.exist;
Почему я рекомендую использовать
getByText
над использованием тестового идентификатора? В документации по библиотеке тестирования (которую вы используете и которая не относится к Vitest) рекомендуется использовать идентификаторы тестов для запроса элементов как наименее предпочтительный/рекомендуемый метод запроса.
Из документации библиотеки тестирования : «Пользователь не может видеть (или слышать) их, поэтому это рекомендуется только в тех случаях, когда вы не можете сопоставить роль или текст или это не имеет смысла (например, текст является динамическим)». , что противоречит их принципу «ваш тест должен максимально напоминать то, как пользователи взаимодействуют с вашим кодом (компонентом, страницей и т. д.)».
Чтобы увидеть работающий пример того, что я описал, я создал демо на StackBlitz.