Pants のテストでカバレッジを取得する
概要
Pants では、テストを実行する際にカバレッジを取得できる(link)。
カバレッジを取得する
Pants でカバレッジを取得するには、実行時に--use-coverage
を指定するか、設定ファイルに[test]
セクションを追加する。
| $ pants test --use-coverage ::
|
| [test]
use_coverage = true
|
カバレッジを取得するファイルを指定する
Pants は推移的に依存するファイル全てを対象にカバレッジを取得するが、filter 機能を使うとカバレッジを取得するファイルを制限できる。
カバレッジ対象を推移的な依存を含まずに、なるべく変更があったファイルだけにする例を GitHub Actions でやってみると次のようになる
| # 省略
- name: set coverage filter
run: |
# coverageの対象となる変更のあったソースファイルを指定する。
filter=$(pants --changed-since=origin/main --changed-dependents=transitive --filter-target-type=python_source peek | jq '.[].sources[]' | xargs dirname | sed ':a;N;$!ba;s/\n/","/g' | sed 's/^/"/;s/$/"/')
echo "PANTS_COVERAGE_PY_FILTER='[${filter}]'" >> $GITHUB_ENV
- name: Test and Report Coverage
run: |
echo ${{ env.PANTS_COVERAGE_PY_FILTER }}
PANTS_COVERAGE_PY_FILTER=${{ env.PANTS_COVERAGE_PY_FILTER }} pants --changed-since=origin/main --changed-dependents=transitive test
|
気になるところ
$filter
に対象のファイルの配列を代入し、pants test --coverage-py-filter=${filter}
で展開させて実行しようとすると、うまく filter を指定できず実行できなかった。それもあって、GitHub Actions のJavaScript
の機能で展開するとうまくできた。