2009-06-30 9 views
88

RSpecでコントローラをテストするときに問題が残っています - response.bodyの呼び出しは常に空の文字列を返します。ブラウザではすべてが正しくレンダリングされ、キュウリのフィーチャテストは正しいと思われますが、RSpecは毎回失敗します。RSpecコントローラのテスト - ブランクのresponse.body

response.should render_template('index')などの応答オブジェクトに対するその他の期待は問題なく通過します。

この問題が発生しましたか?おそらく応答HTMLは他の方法で得られるでしょうか?

バージョンは、Rails 2.1.0、RSpec 1.2.7です。

答えて

166

デフォルトでは、rspec-railsはにRailsをハックして、が実際にビューテンプレートをレンダリングしないようにします。アクションの振る舞いのみをテストする必要があります&は、テンプレートのレンダリングの結果ではなくコントローラのテストをフィルタリングします。しかし

、アプリが正常に、render_viewsディレクティブ使用すると、あなたのコントローラの仕様は、テンプレートをレンダリングしたい場合:私は(この質問に私を導いた)同様の問題で働いたよう

describe YourController do 
    render_views 
    ... 
end 
+2

ありがとう、ちょうど私が必要とした。 –

+1

私は何年もRailsに取り組んできましたが、今度はコントローラと要求仕様の違いを最終的に理解しています。ありがとう! –

2

を、同じ猫の皮膚を作る方法が違うことが私には起こりました。言い換えると、本文の内容を確認するのではなく、フラッシュの内容を確認することができます。

response.body.should =~ /Invalid email or password/ 

はと同等のチェックであるかもしれない:私に

flash[:alert].should == "Invalid email or password" 

それがいずれかの方法を実行するよう、後者は、もう少し柔軟なようだが、それはすべての場合に適切でないかもしれません。

乾杯、

ジョン

2

RSpecの2+:あなたは、エンドツーエンドをチェックしたい場合は - レスポンスボディにURLを - 代わりcontroller specrequest specを使用しています。この問題を解決する方法はデフォルトで

0

、RSpecのレール構成はコントローラの仕様のためのテンプレートのレンダリングを無効に

Oneをrails_helper.rbファイルにrender_views設定を有効にしてくださいすることによってです。このようにして、すべてのテストでグローバルに作業できるようになります。

RSpec.configure do |config| 
    config.render_views 
end 

または使用render_views宣言個々のグループ:

describe User do 
    render_views 
end 

あなたはこのhereについての詳細を読むことができます。

関連する問題