#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 и не нашел разницы. Последнее проще / чище, поэтому я предпочитаю. Но я новичок. Существуют ли ситуации, когда первое работает, а второе — нет?