Тестирование в flutter выдает ошибку MediaQuery.of(), вызываемую с контекстом, который не содержит MediaQuery

#flutter #flutter-test

#flutter #flutter-test

Вопрос:

Я пытаюсь протестировать код для страницы входа в систему в flutter. Для меня это первый раз, и я просто следую шаблону, предоставленному ими. Но любой виджет, который я пытаюсь нажать, выдает ошибку, сообщающую, что MediaQuery.of() вызывается с контекстом, который не содержит MediaQuery.

Я пробовал, загружая разные виджеты в свое приложение. Но каждый виджет выдает ту же ошибку, что и упомянутый выше, с другой стороны, мое приложение отлично работает на устройстве, но во время тестирования выдает ошибку только для перекачки виджета.

 await tester.pumpWidget(Login());
 

а страница входа в систему представляет собой простой каркас с панелью приложений и телом.

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

1. для доступа к функциям MediaQuery должно быть MaterialApp выше в иерархии.

Ответ №1:

Добавьте этот вспомогательный метод :

  Widget buildTestableWidget(Widget widget) {
   return MediaQuery(data: MediaQueryData(), child: MaterialApp(home: widget));
 }
 

Затем вы можете использовать внутри своего теста:

  await tester.pumpWidget(buildTestableWidget(Login()));
 

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

1. Разве не было бы достаточно просто обернуть «тестируемый виджет» с помощью MaterialApp? Что-то подобное работало для моих виджетов с Scaffold amp; AppBar: Widget makeTestableWidget(Widget child) { return MaterialApp(home: child); } в чем преимущество того, чтобы сначала обернуть его с помощью MediaQuery? Я тоже новичок в flutter, так что это настоящий вопрос, поскольку я пока этого не понимаю 🙂

2. Я тестировал как с решениями diegoveloper, так и с решениями @Wazniak и не нашел разницы. Последнее проще / чище, поэтому я предпочитаю. Но я новичок. Существуют ли ситуации, когда первое работает, а второе — нет?