RSpec应该重定向到问题

时间:2009-03-15 16:04:57

标签: ruby-on-rails rspec

我正在为我的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

虽然在这种情况下,检查响应是重定向然后检查是否重定向到特定页面是多余的,因此不再需要断言。

2 个答案:

答案 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不同,因此您可以访问控制器中的实例变量。