Это самый задаваемый вопрос о RTL: D
Лучшая стратегия состоит в том, чтобы использовать jest.mock
(или эквивалент в вашей среде тестирования), чтобы смоделировать выборку и визуализировать выборку HTML вместо этого.
Для получения дополнительной информации о том, почему это лучший подход, я написал кое-что, что относится и к этому случаю. ОП спросил о выборе в Material-UI, но идея та же.
Оригинальный вопрос и мой ответ:
Потому что вы не можете контролировать этот интерфейс. Это определено в стороннем модуле.
Итак, у вас есть два варианта:
Вы можете выяснить, какой HTML создает библиотека материалов, а затем использовать container.querySelector, чтобы найти его элементы и взаимодействовать с ним. Это займет некоторое время, но это должно быть возможно. После того, как вы сделали все это, вы должны надеяться, что при каждом новом выпуске они не слишком изменяют структуру DOM, или вам, возможно, придется обновить все ваши тесты.
Другой вариант - полагать, что Material-UI собирается создать работающий компонент, который могут использовать ваши пользователи. Основываясь на этом доверии, вы можете просто заменить этот компонент в своих тестах на более простой.
Да, первый вариант проверяет то, что видит пользователь, но второй вариант легче поддерживать.
По моему опыту, второй вариант хорош, но, конечно, ваш вариант использования может отличаться, и вам, возможно, придется протестировать фактический компонент.
Это пример того, как вы могли бы посмеяться над выбором:
jest.mock("react-select", () => ({ options, value, onChange }) => {
function handleChange(event) {
const option = options.find(
option => option.value === event.currentTarget.value
);
onChange(option);
}
return (
<select data-testid="select" value={value} onChange={handleChange}>
{options.map(({ label, value }) => (
<option key={value} value={value}>
{label}
</option>
))}
</select>
);
});
Вы можете прочитать больше здесь .