Test::Moreで、特定のsubtestだけを実行する

Test::Flattenってのを使うとできるぽい。

特定のひとつだけなので、直接Perlをぶっ叩く感じだと、以下のような感じ。

SUBTEST_FILTER=hogehoge perl -MTest::Flatten t/MyApp/main.t

環境変数(SUBTEST_FILTER)に入れたsubtestだけが実行される。
上記の場合だと、

use Test::More;

subtest 'hogehoge' => sub {
    ok(1,'これはok');
}

複数のsubtestがあった場合でも、特定のtestだけを実行できる。

実際は、cartonを使っているので以下のような感じ。

SUBTEST_FILTER=hogehoge carton exec -- perl -Ilib -MTest::Flatten t/MyApp/main.t

また、proveの場合でも、

SUBTEST_FILTER=hogehoge carton exec -- prove -Ilib -MTest::Flatten ./t

って感じで、特定の箇所だけ実行可能。

追記

上記の状態だと、

use Test::More;

subtest 'hogehoge' => sub {
};

subtest 'get_hogehoge' => sub {
};

subtest 'make_hogehoge' => sub {
};

subtest 'hogehoge_foo' => sub {
};

こんなテストコードの場合、全部動いてしまいます。

正規表現が使えるようなので、

SUBTEST_FILTER='^hogehoge$'

こんな感じですかね。