我正在为我的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得到这个错误:
'课程控制器POST /课程[好输入]
应该在创建后重定向到课程索引页面
失败
预期重定向到"/ courses",没有重定向
任何想法为什么会这样?
解决了
正如rishavrastogi所述,be_success应该在2xx范围内预期一个http代码,并且重定向属于3xx范围(实际上是302)
断言需要更改为=> response.should be_redirect.
虽然在这种情况下,检查响应是重定向然后检查重定向到特定页面是多余的,因此不再需要断言.
我不是RSpec-er,但我猜"response.should be_success"不应该存在,因为响应实际上是"HTTP重定向"而不是"HTTP成功"...所以尝试删除response.should be_success
也改变
post :create
至
post :create, :course => {}