ぽっぺん日記@karashi.org
2007-09-20(Thu) [長年日記]
_ [Rails][rspec]HelperのRSpecテストでちょっとハマった
RSpecでHelperのテストを書いていて、ちょっとハマったのでメモ。
テストしようと思ったのは、こんなコード。
application_helper.rb:
def show_link(string, options = {})
link_to(string, { :action => "foobaa" }.merge(options))
end
RSpecのテストには、こんなコードを書いた。
application_helper_spec.rb:
it "show_link should return link" do
show_link("hoge", :key=>'abc').should =~ /^<a href=.*key=abc.*>.*<\/a>$/i
end
ホントは正規表現をもっと厳密に書かないとテストにならないんだけど、ご愛嬌。
ここまで書いて、テストを走らせたところ(と言うか、ホントはautotestで自動だけど)、
Need controller and action!
と怒られ、テストが失敗する。あれー? と思いつつ、色々といじってみるがダメ。
で、エラーの文面を読み直し、もしかしてと思いついて、application_helper.rbをこんな感じに書き直してみたら、テストが通るようになった。
def show_link(string, options = {})
link_to(string, { :controller => @controller.controller_name, :action => "foobaa" }.merge(options))
end
なるほど。エラーで言っている通り、controllerが指定されていないとダメなんだね。同一controllerの場合には、actionだけ書いて、controllerは書かないようにしていたので、まったく思いもよらなかった。
たぶん、これって常識なんだけだろうけども、もしかしたら役に立つ人もいるかも知れないので書いておきます。
[ツッコミを入れる]
