RSpec がコントローラーとビューのテストを分離できる点は非常に気に入っていますが、Capybara マッチャーをビューのテストで動作させるのに問題があります。基本的に私が実現しようとしているのは次のようなことです。
describe "some page" do
it "should render with lots of stuff" do
assign ..
render
rendered.should have_button ('Any button') #or any capybara matcher, really
end
end
ネット上で、capybara と rails3 を cucumber または rspec コントローラー テストでスムーズに動作するように構成する方法を示した投稿をいくつか見ましたが、これは私が本当に望んでいることではありません。つまり、可能な限り低いレベルでビューをテストするということです。
また、これを行う別の方法(多くのカスタム コードを必要とせず、nokogiri または適切なツールを使用してレンダリングされたものから指定されたセレクターを抽出するマッチャーをいくつか作成できることがわかっている)があれば、それも素晴らしいでしょう。capybara の使用は必須ではありません。
ベストアンサー1
コントローラー (およびビュー) をテストするときに、Capybara マッチャー (Webrat の負荷なし) を使用するオプションが追加されました。私は次のように使用しています:
describe GlobalizeTranslationsController do
render_views
let(:page) { Capybara::Node::Simple.new(@response.body) }
describe "PUT :update" do
before do
put :update
end
it "displays a flash notice" do
page.should have_selector('p.notice')
end
end
end
完全なコード:
参考文献: