Выбор ответа Junior Тестирование обновлено
Забытый await у user-event
Вопрос
Тест падает: обработчик не вызван. Что исправить?
test('сохраняет', async () => {
const user = userEvent.setup();
const onSave = vi.fn();
render(<Editor onSave={onSave} />);
user.click(screen.getByRole('button', { name: 'Сохранить' }));
expect(onSave).toHaveBeenCalled();
});
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: user.click асинхронный, нужен await. user.click возвращает промис: внутри он последовательно генерирует pointer- и mouse-события.
Варианты ответа
- Заменить
userEventнаfireEvent, он надёжнее - Обернуть
renderвact, иначе клик не обработается user.clickасинхронный, нуженawaitправильный ответ- Добавить
data-testidкнопке, чтобы клик попал в неё
Разбор
user.click возвращает промис: внутри он последовательно генерирует pointer- и mouse-события. Без await строка с expect выполняется до клика.
fireEventсинхронный, но проверяет меньше реального поведения; проблема тут не в нём.- RTL сам оборачивает
renderвact. - Test id ни на что не влияет: кнопка уже находится по роли.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.