Pants Test の Coverage 対象のファイルを Filter する¶
背景¶
Pants Test の Coverage は、対象ファイルの推移的な依存までカバレッジ対象に含めてしまう。 テストの中で推移的な依存ファイルの一部のクラスや関数だけ使われるという場合に、テストのカバレッジが低くなってしまう。 推移的な依存ファイルをなるべく除外し、テストのカバレッジを正確に測るためにできるだけ変更があったソースファイルのみをカバレッジ対象に含めるようにしたい。
解決策¶
Pants Test の Coverage 対象のファイルをFilterできる。
filter sample | |
---|---|
上記の場合、foo_dir
とfoo_dir/bar_dir
のファイルのみがカバレッジ対象になる。 この filter 機能を使って、変更があったソースコードのみを対象にすることで、必要ない推移的な依存ファイルをカバレッジ対象から除外できる。
次のように変更があったファイルのディレクトリのみを取得し、それを filter に指定すると推移的な依存ファイルを除外したテストのカバレッジを取得できる。dirname
でディレクトリ名のみを取得しているのは、filter にはディレクトリを指定する必要があるため。 ${{ env.PANTS_COVERAGE_PY_FILTER }}
に filter を設定しておくことで、pants test
の実行時に filter を指定できる。これは、GitHub Actionsのenvコマンドを使って設定している。shell の${filter}
を使って展開したものを設定するとうまくうごかなかったため、GitHub Actions の env コマンドを使って設定している。