4

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

现在我正在使用设计来处理我的用户身份验证。

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

我有以下代码:

请求/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 提供的助手。

任务控制器.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>

现在调用访问时,由于会话中没有建立用户,我希望响应被重定向到/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 回答