BDD に慣れるために、現在取り組んでいる Rails アプリのサンプルがあります。
現在、Devise を使用してユーザー認証を処理しています。
新しい、作成、編集、および破棄アクションにアクセスするために、ユーザーがログインする必要があるタスク モデルがあります。
次のコードがあります。
requests/tasks_spec.rb
describe "Tasks" do
it "redirects to sign in for new task if no user logged in" do
visit new_task_path
response.should redirect_to(new_user_session_path)
end
end
TasksController に before_filter ロジックを追加していないため、このテストを実行すると失敗することが予想されます。テストを実行すると失敗します。
authenticate_user!
次に、Devise が提供するヘルパーを追加します。
tasks_controller.rb
class TasksController < ApplicationController
before_filter :authenticate_user!, only: [:new, :edit, :create, :destroy]
...
end
テストは実行されますが、次のように失敗します。
1) TasksController redirects to sign in for new task if no user logged in
Failure/Error: response.should redirect_to(new_user_session_path)
Expected response to be a <:redirect>, but was <200>
ここで、visit を呼び出すと、セッションでユーザーが確立されていないため、応答が /user/sign_in にリダイレクトされることが期待されます。しかし、私は単純に 200OK を返します。
ここで何が欠けていますか?このテストに合格するにはどうすればよいですか?