使用Devise和RSpec测试身份验证重定向

时间:2012-11-06 22:34:16

标签: ruby-on-rails devise capybara rspec-rails

我有一个我正在研究的示例Rails应用程序,因此我可以开始熟悉BDD。

现在我正在使用Devise处理我的用户身份验证。

我有一个Task模型,要求用户登录才能访问新的,创建,编辑和销毁操作。

我有以下代码:

请求/ 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逻辑。我运行测试但失败了。

现在我添加了Devise提供的authenticate_user!帮助器。

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。

我在这里缺少什么?我如何让这个测试通过?

1 个答案:

答案 0 :(得分: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