コントローラーのテスト時にレンダリングを無効にする
-
08-07-2019 - |
質問
コントローラーをテストするためにshouldaでTest :: Unitを使用しています。
コントローラーをテストしているだけなので、ビューをレンダリングしたくありません。
いくつかのオブジェクトをスタブ化していますが、ビューがレンダリングされるときにいくつかのエラーがスローされますが、コントローラーが正しいため、テストは失敗しません。
では、テストからテンプレート/ビューのレンダリングを無効にする方法はありますか?
rSpecはそのように機能すると聞きました。
解決
Mochaを使用している場合は簡単です。これを個々のテストまたはセットアップ方法に追加します。
@controller.expects(:render)
そうでない場合は、Mochaを使用してください。
gem install mocha
その後、test_helper.rbで
require 'mocha'
他のヒント
テストで実際にビューが表示されることはありません。失敗したテストコードを投稿できますか?コントローラー(機能)テストは、アクションが呼び出されたときに特定のアクションが発生していることを確認するだけです。つまり、正しいビューをレンダリングするか、別のアクションにリダイレクトすることを確認する必要があります。ビューのフラッシュまたはその他の変数の設定を確認することもできます。これはあなたがテストしているこのタイプですか?
shoulda docsから取得リクエストを取得してshowアクションをテストする良い例は次のとおりです。
class UsersControllerTest < Test::Unit::TestCase
context "on GET to :show" do
setup { get :show, :id => 1 }
should_assign_to :user
should_respond_with :success
should_render_template :show
should_not_set_the_flash
should "do something else really cool" do
assert_equal 1, assigns(:user).id
end
end
end
レールガイドをご覧くださいこれもかなり良いです。
所属していません StackOverflow