#flutter #testing #flutter-test
#трепетание #тестирование #тест на флаттер
Вопрос:
В моем домашнем виджете, когда пользователь нажимает кнопку возврата к системе, он показывает с помощью WillPopScope виджет диалогового окна подтверждения. Я хочу протестировать этот диалог, но я не могу понять, как нажать кнопку «Назад» в тестовом файле.
Ответ №1:
У меня была та же проблема, но в моем приложении не было кнопки возврата. Я хотел протестировать кнопку возврата системы Android. Вот как я это сделал. Может быть, это полезно для людей, которые сталкиваются с той же проблемой, что и я.
testWidgets("test onWillPop",(WidgetTester tester) async {
bool willPopCalled = false;
await tester.pumpWidget(
MaterialApp(
home: Scaffold(
body: WillPopScope(
onWillPop: () async {
willPopCalled = true;
return false;
},
child: Container(),
),
),
),
);
final dynamic widgetsAppState = tester.state(find.byType(WidgetsApp));
await widgetsAppState.didPopRoute();
await tester.pump();
expect(willPopCalled, true);
});
Вдохновленный: https://github.com/flutter/flutter/blob/master/packages/flutter/test/material/will_pop_test.dart
Комментарии:
1. Почему бы не проверить и это
expect(await widgetsAppState.didPopRoute(), isTrue);
тоже?2. Это дело личных предпочтений, лично я никогда не тестирую функциональность самого фреймворка Flutter. Фрагмент кода, который я написал, является лишь примером того, как вы можете вызвать кнопку «Назад». В обычных случаях ваш виджет определен в исходном проекте, и вы ожидаете, что что-то произойдет при нажатии кнопки «Назад». Я бы только утверждал предполагаемый результат.
Ответ №2:
Я не могу понять, как нажать кнопку «Назад» в тестовом файле.
Это поможет вам увидеть кнопку «Назад» на панели приложений (верхняя часть приложения). Это позволит вам увидеть кнопку «Назад» через панель приложений
return WillPopScope(
onWillPop: _onWillPop,
child: Scaffold(
appBar: AppBar(
title: Text("Title"),
centerTitle: true,
leading: IconButton(
icon: Icon(Icons.arrow_back, color: Colors.black),
onPressed: () => _onWillPop(),
),
),
body: Body(),
),
);
_onWillPop будет вашим «виджетом диалогового окна подтверждения» для вашего вопроса.
Ответ №3:
По-видимому, вы не можете получить доступ Navigator
к тесту. Итак, мое решение состоит в том, чтобы включить BackButton
где-нибудь в закачанный виджет и открыть страницу следующим образом:
await tester.pumpWidget(MaterialApp(
home: Scaffold(
body: Container(
child: BackButton(),
),
),
));
...
await tester.pageBack();