$ flutter --version Flutter 2.5.1 • channel stable • https://github.com/flutter/flutter.git Framework • revision ffb2ecea52 (9 weeks ago) • 2021-09-17 15:26:33 -0400 Engine • revision b3af521a05 Tools • Dart 2.14.2
原因
一時的な対応
根本対応
Flutterのmasterには対応が入ってるっぽい
じぶんはどうしたか
stableから変更したくなかったので一時的な対応を行った。こういうスクリプトを書いてcoverageを取得したい時にscriptを実行して作成されたファイルを実行するようにした。
import 'dart:io'; Future<void> main() async { final dir = Directory('test'); final files = <File>[]; await for (final file in dir.list(recursive: true)) { if (file is File && file.path.contains('_test.dart')) { files.add(file); } } files.sort((a, b) => a.path.compareTo(b.path)); final imports = files.map((file) { final basename = file.path.split('/').last; final name = basename.replaceAll('.dart', ''); // ignore: prefer_single_quotes return """ import '${file.path.replaceFirst('test/', '')}' as $name; """; }).join(''); final tests = files.map((file) { final name = file.path.split('/').last.replaceAll('.dart', ''); return ''' group( '$name', $name.main, ); '''; }).join(''); final body = """ import 'package:test/test.dart'; $imports void main() { $tests } """; final testFile = File('test/coverage.dart'); await testFile.writeAsString(body); }
dart test/generate_coverage_testfile.dart flutter test --coverage test/coverage.dart
coverageを実行するのに17分ほどかかっていたのが1分で終わるようになった。すごい。