flutter Process.run集成测试期间本地机器上的www.example.com()

wj8zmpe1  于 2023-01-27  发布在  Flutter
关注(0)|答案(1)|浏览(129)

我为Flutter应用程序编写了一些集成测试,并且在测试期间需要在本地机器上执行一些shell命令。
我知道我可以用Process.run()执行这些命令,但是在集成测试期间,这个命令是在我的android手机上执行的,而不是在我的本地机器上。
在集成测试期间,是否有任何方法可以在本地计算机上运行命令?

50few1ms

50few1ms1#

用flutter驱动程序可以在你的测试机器上运行进程。
在我的例子中,它是在运行flutter测试时打开一个深层链接。然后你就可以得到上下文了。

flutter drive \
--driver=test_driver/driver_tests/your_test.dart \
--target=test_driver/your_driver.dart

您的驱动程序。dart:

import 'package:flutter_driver/driver_extension.dart';
import 'package:arriba/main.dart' as app;

void main() {
  enableFlutterDriverExtension();
  app.main();
}

您的_测试.dart:

import 'dart:io';

import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

//!! DOES NOT RUN WITHOUT FLUTTER DRIVER MAIN !!
void main() {
  late FlutterDriver driver;

  const String shareLink = 'your_link.html';

  setUpAll(() async {
    driver = await FlutterDriver.connect();
  });

  tearDownAll(() async {
    await driver.close();
  });

  test(
    'starting deep link test',
    () async {
      driver.waitUntilFirstFrameRasterized();
      await Process.run(
        'adb',
        [
          '-d',
          'shell',
          'am',
          'start',
          '-a android.intent.action.VIEW',
          '-c android.intent.category.BROWSABLE',
          '-d $shareLink',
          'YOUR PACKAGE NAME',
        ],
      ).then((result) {
        stdout.write(result.stdout);
        stderr.write(result.stderr);
      });
    },
    timeout: const Timeout(Duration(seconds: 60)),
  );
}

相关问题