测试CircularProgressIndicator

时间:2019-07-16 14:21:55

标签: flutter spinner loading

我正在使用ModalProgressHud来显示微调框,它正在等待服务器的答复。我想测试一下,当用户点击按钮时,会显示CircularProgressIndicator。我的问题是pumpAndSettle()会超时,因为我认为CircularProgressIndicator会不断重建自身。关于如何测试CircularProgressIndicator是否存在任何建议? 这是我的测试:

testWidgets(
      'Should show a CircularProgressIndicator while it tries to login', (WidgetTester tester) async {

    await (tester.pumpWidget(
             generateApp(LoginView())
          ));
    await tester.pumpAndSettle();
    await tester.tap(find.byType(FlatButton));
    await tester.pumpAndSettle();

    expect(find.byType(CircularProgressIndicator), findsOneWidget);
  });

2 个答案:

答案 0 :(得分:1)

您应该创建一个“正在加载” bool,并在登录屏幕之前创建setState((){}),并在评估登录是否成功时使用另一个{}。

我不确定如何遵循您的代码,但也许像这样...

bool loading = false;

testWidgets(
      'Should show a CircularProgressIndicator while it tries to login', (WidgetTester tester) async {

    loading == false ? setState((){
             loading = true;
             await (tester.pumpWidget(
             generateApp(LoginView())
          ));}
    await tester.pumpAndSettle();
    await tester.tap(find.byType(FlatButton));
    await tester.pumpAndSettle();

    expect(find.byType(CircularProgressIndicator), findsOneWidget);
  });

答案 1 :(得分:1)

您的想法是正确的-您不能pumpAndSettle,因为CircularProgressIndicator会无限期地动画。您可以尝试将tester.pump()和超时一起使用,而不要使用pumpAndSettle