flutter 集成测试|泵和沉降

czq61nw1  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(135)

我有一个屏幕(比如屏幕B),它使用动画一秒钟,然后显示UI元素。动画结束后,我需要得到一个按钮,并按下它。
这个屏幕在一个特定的屏幕之后(比如屏幕A)。我已经成功地编写了集成测试(使用integration_test),现在出现了这个屏幕。现在的情况是这样的-

  1. A有一个按钮,我点击它并执行pumpAndSettle
    1.由于按下按钮,出现B屏幕。
    1.现在我需要等待1秒,然后当前视图动画到左边,一个新的视图出现,其中有一个按钮。
  2. I did pumpAndSettle(Duration(seconds:(1))
    1.现在,在第4行代码之后,没有任何东西执行,测试直到超时才结束。
    更多信息:
    因此,有一个屏幕(说应用程序的主屏幕)上,我显示“进度指示器”,直到我有数据可用。
    现在有一个屏幕被推到主屏幕的顶部(一种欢迎屏幕),用于新安装应用程序。
    在那个屏幕欢迎屏幕,我有一个视图,我动画一秒钟后离开,并显示欢迎项目与跳过按钮。
    所以
[1] expect(welcomeScreen, findsOneWidget);

[2] await Future.delayed(Duration(seconds: 1));

[3] await tester.pumpAndSettle();

上面的代码行工作正常,但如果我这样做,

[2Alt] await tester.pumpAndSettle(Duration(seconds: 1))

这是无限期的。
进一步
有一个跳过按钮,出现后1秒(在欢迎屏幕上),我点击跳过按钮,弹出欢迎屏幕,回到主屏幕,“进度指示器”正在旋转,直到收到数据。

expect(skipButton, findsOneWidget);
await tester.tap(skipButton);
await tester.pumpAndSettle();

这里pumpAndSettle占用无限时间(直到超时)
我不知道是什么原因。实际上pumpAndSettle正在做的是..如果我只泵,它的工作原理

ne5o7dgx

ne5o7dgx1#

尝试这个泵,直到你需要的东西出现.

do await tester.pump(); while (
        tester.widgetList(find.byType(WhatYouNeedWidget)).isEmpty);

相关问题