Michael Hartl のRuby on Rails Tutorial, 2nd Ed、第 9 章の演習 6 では、次のように述べています。
サインインしたユーザーは、Users コントローラーの new および create アクションにアクセスする必要はありません。そのようなユーザーがこれらのページにアクセスしようとすると、ルート URL にリダイレクトされるように手配します。
このための rspec テストをどのように書くのでしょうか? 私はこれを試しました
describe "POST on Users#create" do
before { post users_path }
specify { response.should redirect_to(root_path) }
end
do/end ブロックの使用、ユーザー属性のハッシュの追加などを試しました。上記のスニペットは、公式サンプル コードの162 行目に追加されました。それらのすべてが私にこのエラーを与えます:
Failures:
1) Authentication authorization as non-admin user POST on Users#create
Failure/Error: before { post users_path }
AbstractController::DoubleRenderError:
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
# ./app/controllers/users_controller.rb:27:in `create'
# ./spec/requests/authentication_pages_spec.rb:72:in `block (5 levels) in <top (required)>'
Finished in 2.72 seconds
88 examples, 1 failure
Users コントローラーの new および create アクションへのアクセスを制限するという実際の目的については、次の行を追加して解決しました。
admin_user if signed_in?
手でテストしたので、これが機能することを知っています。唯一の問題は、rspec テストを作成できないことです。このチュートリアルに従って作成したコードは、github で入手できます。
このエラーが発生するのはなぜですか? 私は何を間違っていますか?解決策は何ですか?ありがとうございました。