Perl で Test::More を使ったテストを修正していて、fail するけど今すぐ直せないのがあったので TODO: { } で囲ったんだけれど何も変わらないじゃない。 あれそんな時は perldoc Test::More の TODO: BLOCK サブセクションでも TODO: { } で囲ってるじゃん。
「そもそもテストが TODO: な ブロック内だってことどうやって判定しているのよ、どんな Perl マジック?」と調べたら…… $TODO 変数設定されているか見ているだけだった(あるいは Test::More->builder->{Todo} が defined か)。 ドキュメント中の local $TODO = $why; の方が肝だった。 ああ、それは説明文するための optional な設定だと思ってたよ。
そもそも TODO: って文法的にはブロックの名前じゃなくてただのラベルか? ということで
TODO: { local $TODO = $why; ok( foo(), $test_name ); is( foo(42), 23, $test_name ); };
は
{ local $TODO = $why; ok( foo(), $test_name ); is( foo(42), 23, $test_name ); };
でいい訳で。完全に人向けの飾りだった。
「TODO:」? あんなの飾りです。偉い人にはそれがわからんのですよ。
良い子のみんなは $TODO 多用しちゃ駄目だぞ。
@tokuhirom 情報より。
Test::More::todo_skip を使う場合は中で last TODO; しているので TODO: が必要。 ちなみに Test::More::skip の中では last SKIP; しているので SKIP: が必要。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。