Это касается всех, кто пытается написать автоматизированный тест, который нажимает на компонент выбора пользовательского интерфейса материала и по какой-то причине не отображает параметры выбора.
Вот причина: компонент Select больше не прослушивает клики, а слушает событие mouseDown. Измените событие click на mouseDown, и вуаля, ваш тест теперь будет иметь доступ к параметрам рендеринга.
// bad fireEvent.click(getByText('Select component'); // good fireEvent.mouseDown(getByText('Select component');
Щелчок вообще ни за что не распознается, поэтому ваш пользовательский интерфейс будет выглядеть так, как будто ничего не произошло.
Так было не всегда. До версии Material UI 4.7.1, выпущенной 1 декабря 2019 г., щелчок работал должным образом. С безобидно звучащим выпустить запись в журнале изменений — [Выбрать] Улучшить реакцию, реагировать на нажатие мыши — было введено это ломающее и в остальном озадачивающее изменение.
Это описание правильное, но оно замалчивает тот факт, что компонент больше не реагирует на клики. В релевантном коммите поведение компонента меняется, как и все тесты — переход от click к mouseDown.
Через несколько дней после выпуска было поднято множество вопросов, ставящих под сомнение это изменение. В one пользователь Github pheeria спрашивает: Разве это не серьезное (или даже критическое) изменение? Ожидается, что вы случайно запустите npm update
для увеличения версии патча, предполагая, что будут происходить только обратно совместимые исправления ошибок. А потом есть (потенциально) куча неудачных тестов.
Этой линии размышлений было достаточно, чтобы один из создателей Material UI, Оливье Тассинари, спросил свою команду: Что вы думаете об отмене этих изменений? Мы знаем, что этого не произошло, возможно, частично из-за Ответ Тассинари получил от члена команды Себастьяна Зильберманна: «Это был бы плохой прецедент. Это была ошибка. Люди, полагающиеся на эту ошибку (особенно в тесте), не должны блокировать исправление.
Вот оно. По-видимому, компонент Select никогда не предназначался для реакции на щелчок. Определенно кое-что, что нужно иметь в виду для остальной части пакета Material UI.
Если это утешит тех, кто потерял время, изменяя свои тесты и поднимая проблемы на Github по этому поводу, Тассинари признал, что изменение не должно было появиться в выпуске патча, а Зильберманн сказал, что запись в журнале изменений должна была быть более описательной.
Боковая панель по кликам, mouseDowns и mouseUps
Когда вы щелкаете мышью по элементу и отпускаете его, запускаются три события в следующем порядке: mouseDown, mouseUp, щелчок.
Если вы нажмете на элемент, отодвинете курсор от элемента, а затем отпустите, сработает только mouseDown. Противоположное происходит для mouseUp. Нет щелчка без mouseDown и mouseUp, то есть когда вы используете мышь.
Щелчок, смоделированный программно, — это отдельная история. Это просто щелчок без прикрепленного события мыши.
Посмотрите сами на этом Codepen, который я сделал.