表題にあるものを書きました。cpanm Test2::Plugin::GitHub::Actions::AnnotateFailedTest
して use Test2::Plugin::GitHub::Actions::AnnotateFailedTest
することで今すぐにご利用いただけます。
以前書いたpytestプラグインとだいたい同じように、GitHub Actionsで落ちたテストがアノテーションされます。
さらに、Test2::V0を使っているのであれば、このように is
の差分がアノテーションされるので、どのような状態でテストに落ちたのかが一目で分かるようになります*1。
Problem matcherについて
今回書いたTest2プラグインを試すために、適当なリポジトリでSetup Perl Environment actionを使ってテストを走らせていたのですが、アノテーションプラグインをuseしなくても落ちたテストにアノテーションされていることに気づきました。
よく見ると、以下のように当該actionのREADMEに書いてあります。
This action sets by perl environment for use in actions by:
- optionally downloading and caching a version of perl
- registering problem matchers for error output
このアノテーションは、Problem matcherという機能によって実現されていました。テストの出力から、落ちたテストのファイルパスや行数・メッセージを正規表現マッチで抽出してアノテーションしています。
なるほど、この機能のことを知らずにTest2プラグインを書いていた*2のですが、reviewdogに渡す出力のフォーマットを決めるのに似ているなと思いました。 落ちたテストの行数だけを知るのであれば、Problem matcherだけでも十分そうです。行数に加えてアサーションの詳細を見たい、というときには単純な正規表現マッチだけでは限界があるので、今回書いたプラグインのようなものを併用するのがよさそうと思いました。
*1:https://github.com/utgwkk/playground-of-Test2-Plugin-GitHub-Actions-AnnotateFailedTest/actions/runs/120008307
*2:当初は行数のアノテーションだけやっていて、アサーションの詳細もアノテーションしたいと思い一念発起して実装した後に気づいた