Тесты 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.

Другие вопросы по тегам