使用带有服务器回调的 http 进行 Flutter 飞镖测试

Posted

技术标签:

【中文标题】使用带有服务器回调的 http 进行 Flutter 飞镖测试【英文标题】:Flutter dart tests with http with server callbacks 【发布时间】:2019-02-27 03:57:10 【问题描述】:

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

例如,我有一个带有服务器请求回调的按钮。当我用测试仪点击按钮时,会调用异步暂停。我已经看到了一些使用模拟请求的解决方法,但我想对服务器执行实际请求。有什么解决办法吗?

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

如果这不可能,您对执行此类测试的软件有其他建议吗?也许通过 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);

);

【问题讨论】:

看起来你只是在模拟网络调用。所以在提交时,网络调用就会去。您所在地区面临什么问题。对不起,我没有得到 @DineshBalasubramanian 当点击完成时,颤振测试会调用异步挂起,因此不会发送服务器请求。我想找到一种方法让测试点击按钮并从按钮按下回调发送请求。 【参考方案1】:

您可能应该将这两种逻辑分开。

首先,您为模拟来自服务器的响应的 UI 创建测试,如上所述。这使您可以根据服务器响应测试 ui 流是否正确。

Andrea Bizotto 在one of his medium posts 中提供了一个很好的例子。

稍后您可以在单独的测试中使用服务器测试逻辑。例如,类似的东西。

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

示例取自firebase plugin tests。

【讨论】:

不会是集成测试吗? (例如使用 integrationo_test)。

以上是关于使用带有服务器回调的 http 进行 Flutter 飞镖测试的主要内容,如果未能解决你的问题,请参考以下文章

带有错误回调函数的 Ajax 响应

OAuth:接收带有参数的回调作为 POST 数据

OAuth:接收带有参数作为POST数据的回调

带有 HTTP 回调的异步 RPC

flutte学习-编译模式

flutte学习-编译模式