RSpecでコントローラーをテストすると問題が発生します-response.body呼び出しは常に空の文字列を返します。ブラウザではすべてが正しくレンダリングされ、キュウリの機能テストは正しく機能しているように見えますが、RSpecは毎回失敗します。
response.should render_template('index')
のような応答オブジェクトに対する他の期待は問題なく通過します。
この問題に遭遇したことはありますか?おそらく、応答HTMLは他の方法で取得できますか?
バージョンに関しては、Rails 2.1.0、RSpec 1.2.7。
デフォルトでは、rspec-Railsは、Rails to)preventにハッキングします。実際にビューテンプレートをレンダリングすることはできません。テンプレートレンダリングの結果ではなく、アクションの動作とコントローラーテストをフィルター処理します。これがビュー仕様の目的です。
ただし、アプリが通常行うようにコントローラーの仕様でテンプレートをレンダリングする場合は、 render_views
ディレクティブ:
describe YourController do
render_views
...
end
RSpec 2+:エンドツーエンドをチェックする場合-応答本文へのURL- controller spec の代わりに request spec を使用します。
同様の問題(この質問につながった)を扱ったときに、同じ猫の皮を剥ぐ方法が異なることがわかりました。つまり、本文を確認するのではなく、フラッシュの内容を確認できる場合があります。
response.body.should =~ /Invalid email or password/
以下と同等のチェックかもしれません:
flash[:alert].should == "Invalid email or password"
後者はどちらの方法でも実行されるため、もう少し柔軟に見えますが、すべての場合に適切であるとは限りません。
乾杯、
ジョン
デフォルトでは、RSpec-Rails構成はコントローラー仕様のテンプレートのレンダリングを無効にします
これを修正する方法の1つは、render_views
設定Rails_helper.rb
ファイル。このようにして、すべてのテストでグローバルに動作できるようにします。
RSpec.configure do |config|
config.render_views
end
または、個別のグループにrender_views宣言を使用します。
describe User do
render_views
end
詳細については、こちらをご覧ください こちら 。