我正在为我的Rails控制器编写一个规范,这是我正在测试的操作:
def create
@course = Course.new(params[:course])
if @course.save then
#flash[:notice] = 'Course Created'
redirect_to courses_path
else
render :action => 'new', :status => 400
end
end
这是验证它的规范:
describe "POST /courses [Good Input]" do
it "should redirect to Courses index page after creation" do
@course.stub!(:save).and_return(true)
post :create
response.should be_success
response.should redirect_to(courses_path)
end
end
我仍然从RSpec收到此错误:
'CoursesController POST / courses [好 输入]
应重定向到课程 创建后的索引页面'
失败
预计重定向到“/ courses”,得到了 没有重定向
为什么会发生这种情况?
解决
如 rishavrastogi 所述,应该是_success 期望2x范围内的http代码,并且重定向属于3xx范围(实际上是302)
断言需要更改为=> response.should be_redirect 。
虽然在这种情况下,检查响应是重定向然后检查是否重定向到特定页面是多余的,因此不再需要断言。
答案 0 :(得分:5)
我也不是RSpec er,但我猜“response.should be_success”不应该存在,因为响应实际上是“HTTP重定向”而不是“HTTP成功”...所以尝试删除response.should be_success
同时更改
post :create
到
post :create, :course => {}
答案 1 :(得分:0)
我不是一个rspecer,但是你必须做assigns(:course).stub!...
之类的事情。规范中的实例变量与控制器中的实例变量assigns
不同,因此您可以访问控制器中的实例变量。