我有一个我正在开发的示例 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 的回报。
我在这里想念什么?我怎样才能让这个测试通过?