Тесты Flutter Dart с http с обратными вызовами сервера
Я разрабатываю некоторые тесты для моего приложения дартс, но у меня есть некоторые проблемы с обратными вызовами при нажатии кнопок.
Например, у меня есть кнопка с обратным вызовом запроса сервера. Когда я нажимаю кнопку с тестером, вызывается асинхронная приостановка. Я видел некоторые обходные пути для этого, используя ложные запросы, но я хочу выполнить фактический запрос к серверу. Есть ли решение для этого.
Ожидаемый результат: тестер нажимает на кнопку. Кнопка выполняет вызов на сервер, а затем тестирование продолжается после поступления запроса / после обновления текущего состояния (любое из них будет хорошим).
Если это невозможно, есть ли у вас какие-либо предложения относительно программного обеспечения для проведения такого рода тестов? Может через Дженкинса?
Код для нажатия кнопки:
testWidgets("Open Login Test", (WidgetTester tester) async{
await tester.pumpWidget(
new MaterialApp(
home: new Material(
child: new LoginScreen(),
),
));
expect(find.text("Next"), findsOneWidget);
expect(find.text("Login"), findsNothing);
Finder emailField = find.byKey(new Key('email'));
await tester.enterText(emailField, "vlad_duncea_31@yahoo.com");
var submitButton = find.byKey(new Key('login'));
expect(submitButton, findsOneWidget);
await tester.tap(submitButton);
expect(find.text("Next"), findsNothing);
expect(find.text("Login"), findsOneWidget);
});
1 ответ
Вы, вероятно, должны разделить обе логики.
Во-первых, вы создаете тест для пользовательского интерфейса, высмеивающий ответ от сервера, как вы сказали выше. Это позволяет вам проверить, что поток пользовательского интерфейса является правильным в зависимости от ответа сервера.
Андреа Бизотто приводит хороший пример в одном из своих средних постов.
А позже вы можете проверить логику с сервером в отдельном тесте. Например, что-то в этом роде.
test('currentUser', () async {
final Firebase user = await auth.currentUser();
expect(user, isNotNull);
expect(user.isAnonymous, isTrue);
expect(user.isEmailVerified, isFalse);
.....
});
Пример взят из тестов плагина firebase.