私が歌川です

@utgwkk が書いている

落ちたテストを片っ端からtodoにして書き戻すTest2プラグイン

github.com

表題のものができました。

どういうことかというと、たとえば以下のようなテストを走らせると、

use strict;
use warnings;
use Test2::V0;
use Test2::Plugin::MakeFailedTestTODO;

ok 0;
fail 'failed';
pass 'passed';

is 1,
   0,
   'multiline';

subtest 'foo' => sub {
    ok 0;
};

done_testing;

テストが終わった後には以下のような内容に書き換えられて、同じテストを2回走らせると、落ちたテストが全部todoになっているのでpassします。

use strict;
use warnings;
use Test2::V0;
use Test2::Plugin::MakeFailedTestTODO;

todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { ok 0; };
todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { fail 'failed'; };
pass 'passed';

todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { is 1,
   0,
   'multiline'; };

subtest 'foo' => sub {
    todo 'by Test2::Plugin::MakeFailedTestTODO' => sub { ok 0; };
};

done_testing;

PPIを使って落ちたテストに該当する文をパースして、todoを組み立てて書き戻す、というのをやっています。なので、複数行のテストでも、インデントの感じはよくないけどちゃんとtodoにできています。

便利なグッズができたと思ったのですが、当初これを使って解決しようと思っていた課題に対しては、もうちょっと簡単で良いアプローチがあるというのに気づいたので供養という形になります。今のところCPANizeの予定はありません。