Тествайте пренасочване за удостоверяване с помощта на Devise и RSpec

Имам примерно приложение на Rails, върху което работя, за да мога да започна да се запознавам с BDD.

В момента използвам 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

Сега, когато стартирам този тест, очаквам да се провали, защото не съм добавил логика before_filter към TasksController. Пускам теста и той се проваля.

Сега добавям помощника 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. Обаче просто получавам 200ОК обратно.

Какво ми липсва тук? Как да накарам този тест да премине?


person Lester Peabody    schedule 06.11.2012    source източник


Отговори (1)


Опитайте тази:

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
person Thanh    schedule 07.11.2012