Module::Spyでテンプレートに渡したパラメータのテストをする
概要
JSONを返すAPIのテストなら、スキーマの確認がやりやすいのだけど
テンプレを返すコントローラってどうやってやろうか、という課題。
テンプレを表示して目視する作戦は効率悪いし、絶対漏れるし
継続的にするの無理だし、プログラムのテストとテンプレのテストが
混ざっていてイケてない感。
IFで使用するパラメータを渡しているかが知りたいのであって
分岐した結果の表示は、また別問題だと思うのです。
で、実際にやってみたらできた!
ざっくりこんな感じ。
$spy = spy_on('Text::Xslate', 'render'); # コントローラ呼ぶ my $mech = Test::WWW::Mechanize::PSGI->new(app => $app); $dat = $mech->get('/'); is($dat->code. 200); my $tmpl = $spy->calls_first->[1]; my $tmpl_params = $spy->calls_first->[2]; is($tmpl, '/index.tt'); my ($ok, $error) = ThaiSchema::match_schema( $tmpl_params, type_hash({ member_id => type_int(), items => type_array( id => type_int(), name => type_str(), num => type_int(), ), pager => type_hash({ total_entries => type_int(), page => type_int(), hashNext => type_bool(), rows => type_int(), }) }); ); is_deeply($tmpl_params, $expected);
calls_firstの1番目以降に、renderメソッドに渡しているパラメータが入っているので
あとは煮るなり焼くなり、好きにできて嬉しい。
まとめ
なんかページの表示がおかしいって時に、コントローラのテストを行うことで
俺のせいじゃないです問題の切り分けが素早くできるようになるはず!