我有一个我正在研究的示例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