Flutter中使用Dart进行HTTP测试,并带有服务器回调函数。

4

我正在为我的Dart应用程序开发一些测试,但是在按钮按下时有一些回调问题。

例如,我有一个带有服务器请求回调的按钮。当我用测试器点击该按钮时,会调用一个异步挂起。我看到一些使用模拟请求的解决方法,但我想执行对服务器的实际请求。是否有任何解决方案?

期望结果:测试人员点击该按钮后,按钮将调用服务器,然后在请求到达/当前状态刷新后继续进行测试(其中任何一个都可以)。

如果这不可能,请问您是否有其他建议的软件来执行此类测试?也许通过Jenkins?

点击按钮的代码:

 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);

});

看起来你只是在模拟网络调用。所以在提交时,网络调用将会执行。你们那边遇到了什么问题?抱歉我没听懂。 - Dinesh Balasubramanian
@DineshBalasubramanian Flutter测试在点击完成时调用异步挂起,因此不会发送服务器请求。我想找到一种方法,让测试点击按钮并从按钮按下回调发送请求。 - pasotee
1个回答

6

你应该将这两个逻辑分开。

首先,你可以创建一个测试来模拟服务器响应,以此来测试UI是否根据服务器响应正确流转,就像你之前说的那样。

Andrea Bizotto在他的一篇Medium文章中提供了一个很好的例子。

然后,你可以在另一个测试中测试与服务器交互的逻辑。例如,以下是一些示例代码。

test('currentUser', () async {
  final Firebase user = await auth.currentUser();
  expect(user, isNotNull);
  expect(user.isAnonymous, isTrue);
  expect(user.isEmailVerified, isFalse);
  .....
});

这个例子来自Firebase插件测试

这不是集成测试吗?(例如使用integration_test)。 - Cícero Moura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接