flutterでテストを書いてflutter test --coverage
でテスト実行してgenhtml
やcodecovでカバレッジを見たら「1ファイルしかテスト書いてないのに100%どういうこと!!???」というときの対処方法です。
原因
flutter(というかdart?)のcoverage生成のオプションではテストファイルから読み込んだテスト対象ファイルしかカバレッジの母数に含めてくれない様子。たぶん。
解決策
こちらのrepoにあるbashをclone, chmodしてproject rootで実行してからflutter test --coverage
すれば万事OK。コマンドも丁寧にReadmeに書いてあります。
https://github.com/priezz/dart_full_coverage
もしlib配下のdartファイルを増やしたらもう一度シェルを叩く必要があります。
スクリプトの仕組み
上記のbashスクリプトは test/coverate_test.dart
というファイルを作り、その中に全てのlib配下のdartファイルを全てimportしてくれています。そしてmain()
の中身を空にすることで「coverage_test.dart
ではテストはしないが、テストファイルからいったんlib配下のdartファイルを全部読み込むことでカバレッジの母数に含めさせる」という状態を一発で作ってくれます。
具体的には以下のようなファイルが出来上がります。
(略)
import 'package:myapp/bloc/aaa_bloc.dart';
import 'package:myapp/bloc/bbb_bloc.dart';
import 'package:myapp/bloc/ccc_bloc.dart';
(略)
import 'package:myapp/widgets/aaa_page.dart';
import 'package:myapp/widgets/bbb_page.dart';
import 'package:myapp/widgets/ccc_page.dart';
(略)
void main() {}
```
たったこれだけですが、ちゃんとカバレッジがlib配下全体に対するデータになります。
以上、これで疑心暗鬼なままテストを書く心配が無くなりますね。