109

RSpec でコントローラーをテストするときに問題が発生します。response.body 呼び出しは常に空の文字列を返します。ブラウザではすべてが正しくレンダリングされ、キュウリの機能テストは正しく行われているように見えますが、RSpec は毎回失敗します。

response.should render_template('index')問題なく合格するなど、応答オブジェクトに対するその他の期待。

以前にこの問題に遭遇した人はいますか? おそらく、応答 html は別の方法で取得できますか?

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

4

4 に答える 4

206

デフォルトでは、rspec-rails は Rails をハッキングして、実際にビュー テンプレートをレンダリングしないようにします。テンプレートレンダリングの結果ではなく、アクションとフィルターの動作のみをテストする必要があります。これがビュースペックの目的です。

ただし、アプリが通常行うようにコントローラ スペックでテンプレートをレンダリングする場合は、次のrender_viewsディレクティブを使用します。

describe YourController do
  render_views
  ...
end
于 2009-06-30T18:54:07.860 に答える
2

私が同様の問題に取り組んだとき(この質問につながった)、同じ猫の皮を剥ぐにはさまざまな方法があることに気づきました。つまり、本文のチェックではなく、フラッシュの内容をチェックできるかもしれません。

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

以下と同等のチェックである可能性があります。

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

どちらの方法でも実行できるため、後者の方が少し柔軟に思えますが、すべての場合に適しているとは限りません。

乾杯、

ジョン

于 2012-09-13T18:20:28.350 に答える