Выбор ответа Junior Тестирование спрашивают часто обновлено

Flutter: pump после tap

Вопрос

Тест нажимает кнопку, которая вызывает setState, и сразу проверяет текст. Проверка падает. Что пропущено?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: await tester.pump() после tap, чтобы отрисовать кадр после setState. Время в widget-тесте управляется вручную: setState помечает элемент, но кадр отрисуется только при pump().

Варианты ответа

  1. await tester.pump() после tap, чтобы отрисовать кадр после setStateправильный ответ
  2. await Future.delayed(const Duration(seconds: 1)), чтобы setState успел отработать
  3. Повторный pumpWidget с тем же виджетом, чтобы дерево построилось заново
  4. await tester.idle() перед tap, чтобы все кадры были готовы заранее

Разбор

Время в widget-тесте управляется вручную: setState помечает элемент, но кадр отрисуется только при pump(). Реальная задержка не помогает, потому что фреймворк не рисует кадры сам. Повторный pumpWidget пересоздаст дерево с потерей состояния. idle не строит кадр.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.