4

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 を返します。

ここで何が欠けていますか?このテストに合格するにはどうすればよいですか?

4

1 に答える 1

2

これを試して:

describe "redirects to sign in for new task if no user logged in" do
  before { post tasks_path }
  specify { response.should redirect_to(new_user_session_path) }
end
于 2012-11-07T04:42:15.110 に答える