新的 integration_test 包只显示“测试开始...”[Android]

And*_* B. 9 integration-testing flutter-test flutterdriver

我尝试将旧的 flutter 驱动程序测试迁移到新的integration_test 包。我复制了示例项目中的几乎所有内容,并在本地执行了示例项目的集成测试。这按预期工作,我能够看到应用程序 UI。但是我自己的应用程序在显示启动画面后仅以紫色显示“测试开始...”。

example_test.dart:

void main() {
  group('My-App', () {
    final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized() as IntegrationTestWidgetsFlutterBinding;

    testWidgets('Tap on SkipAuthentication', (tester) async {
      app.main();

      await binding.traceAction(() async {
        await tester.pumpAndSettle();

        await Future.delayed(Duration(seconds: 5));

        final fab = find.byKey(ValueKey(WidgetKeys.authenticationScreenKeys.skipAuthenticationButton));
        await tester.tap(fab);

        await tester.pumpAndSettle();
      });
    });



integration_driver.dart:

Future<void> main() async {
  integrationDriver();
}
Run Code Online (Sandbox Code Playgroud)

我想通了,如果我不启动 tester.pumpWidget() 显示 Widget,我会传递给方法,但那是 WidgetTest 而不是集成测试。

我的猜测是,这是因为我的 main 函数是一个异步函数。我在旧的 flutter 驱动程序测试中也需要这个解决方法来等待第一帧。但是我不知道如何使用新的 integration_test 包来实现它。

希望您能够帮助我。

vko*_*pio 9

我也遇到了这个问题,并且sleep/Future.delayed不起作用。有时会运行集成测试,但大多数情况下不会运行。

最终为我解决问题的是将framePolicyof更改IntegrationTestWidgetsFlutterBindingLiveTestWidgetsFlutterBindingFramePolicy.fullyLive. 这是一个完整的示例:

void main() {
  final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized();

  binding.framePolicy = LiveTestWidgetsFlutterBindingFramePolicy.fullyLive;

  testWidgets("failing test example", (WidgetTester tester) async {
    app.main();
    await tester.pumpAndSettle();

    // Start testing here...
  });
}
Run Code Online (Sandbox Code Playgroud)

解决方案是从Google Codelabs找到的。


Zal*_*esi 1

呵呵。我开始flutter_driver在假期期间转换我的测试并遇到同样的事情。

我的解决方法是在启动测试后添加固定睡眠,以使其能够正确初始化。因此,一个测试用例如下所示:

    testWidgets("Main screen loads", (WidgetTester widgetTester) async {
      app.main();
      await sleep(Duration(seconds: 10));
      await widgetTester.pumpAndSettle();

      expect(find.text("What are you looking for?"), findsOneWidget);
    });
Run Code Online (Sandbox Code Playgroud)