Кнопка выбора даты Mui недоступна при первом рендеринге в тестах

#material-ui #react-testing-library

#материал-пользовательский интерфейс #react-testing-library

Вопрос:

Новый Material UI DatePicker имеет prop renderInput, который получает функцию, которая отображает текстовое поле. Работает достаточно хорошо, за исключением того, что эта функция отображается дважды, и при первом рендеринге она получает только часть необходимых реквизитов.

При рендеринге с помощью библиотеки тестирования React выполняется только первый рендеринг. Примечательно, что завершение отсутствует. Таким образом, невозможно getByRole('button') и нажать на кнопку, чтобы открыть модальный сборщик.

Я пробовал различные перестановки waitFor() и rerender() , но, похоже, не могу заставить кнопку отображаться.

Вот изолированная среда кода, которая показывает, что две версии параметров renderInput выходят из системы. (У меня также есть тест для поиска кнопки, но, к сожалению, я также делаю что-то не так с тестом, и он не запускается.)

Есть какие-нибудь предложения?

Ответ №1:

Это потому, что Mui DatePicker отображает мобильный вид по умолчанию.

Ниже будет исправлено это:

 beforeEach(() => {
  // add window.matchMedia
  // this is necessary for the date picker to be rendered in     desktop mode.
  // if this is not provided, the mobile mode is rendered, which might lead to unexpected behavior
  Object.defineProperty(window, 'matchMedia', {
    writable: true,
    value: (query: string): MediaQueryList => ({
      media: query,
      // this is the media query that @material-ui/pickers uses to determine if a device is a desktop device
      matches: query === '(pointer: fine)',
      onchange: () => {},
      addEventListener: () => {},
      removeEventListener: () => {},
      addListener: () => {},
      removeListener: () => {},
      dispatchEvent: () => false,
    }),
  });
});

afterEach(() => {
  delete window.matchMedia;
});
 

Для получения более подробной информации: проблема с github

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

1. Спасибо! Застрял на этом некоторое время