diff --git a/packages/flutter_tools/lib/src/drive/drive_service.dart b/packages/flutter_tools/lib/src/drive/drive_service.dart index b9f7bff39b..67242407cb 100644 --- a/packages/flutter_tools/lib/src/drive/drive_service.dart +++ b/packages/flutter_tools/lib/src/drive/drive_service.dart @@ -235,9 +235,16 @@ class FlutterDriverService extends DriverService { int driverPort, List browserDimension, }) async { + // Check if package:test is available. If not, fall back to invoking + // the test script directly. `pub run test` is strictly better because + // in the even that a socket or something similar is left open, the + // test runner will correctly shutdown the VM instead of hanging forever. return _processUtils.stream([ _dartSdkPath, - ...[...arguments, testFile, '-rexpanded'], + if (packageConfig['test'] != null) + ...['pub', 'run', 'test', ...arguments, testFile, '-rexpanded'] + else + ...[...arguments, testFile, '-rexpanded'], ], environment: { 'VM_SERVICE_URL': _vmServiceUri, ...environment, diff --git a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart index e2fd538342..ca396f8020 100644 --- a/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart +++ b/packages/flutter_tools/test/general.shard/drive/drive_service_test.dart @@ -151,7 +151,7 @@ void main() { ]); final FakeProcessManager processManager = FakeProcessManager.list([ const FakeCommand( - command: ['dart', '--enable-experiment=non-nullable', 'foo.test', '-rexpanded'], + command: ['dart', 'pub', 'run', 'test', '--enable-experiment=non-nullable', 'foo.test', '-rexpanded'], exitCode: 23, environment: { 'FOO': 'BAR', @@ -212,7 +212,7 @@ void main() { ]); final FakeProcessManager processManager = FakeProcessManager.list([ const FakeCommand( - command: ['dart', 'foo.test', '-rexpanded'], + command: ['dart', 'pub', 'run', 'test', 'foo.test', '-rexpanded'], exitCode: 11, environment: { 'VM_SERVICE_URL': 'http://127.0.0.1:1234/'