回答:
デフォルトでは、rspec-railsはRailsにハッキングして、実際にビューテンプレートをレンダリングしないようにします。アクションの動作とコントローラーテストのフィルターのみをテストする必要があります。テンプレートレンダリングの結果ではなく、それがビュースペックの目的です。
ただし、アプリが通常行うようにコントローラー仕様をテンプレートにレンダリングする場合は、render_views
ディレクティブを使用します。
describe YourController do
render_views
...
end
RSpec 2+:エンドツーエンド(URLから応答本文へ)を確認する場合は、コントローラー仕様の代わりに要求仕様を使用します。
私が同様の問題を抱えていたので(この質問につながった)、同じ猫の皮をむく方法がいくつかあることに気付きました。つまり、本文を確認するのではなく、フラッシュの内容を確認できる場合があります。
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
詳細については、こちらをご覧ください。