ruby-on-rails – 使用Devise和RSpec测试身份验证重定向

我有一个我正在研究的示例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逻辑.我运行测试但失败了.

现在我添加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.

我在这里错过了什么?如何通过此测试?

最佳答案 试试这个:

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
点赞