我的控制器规格文件中有这个
it "should raise 404" do
business = FactoryGirl.build(:business)
expect{get :edit, :id => business}.to raise_error(ActiveRecord::RecordNotFound)
end
如果我是对的,构建不会保存到数据库,所以业务不应该存在,我的测试应该通过,但它没有。
我还尝试了一个字符串作为“id”的值,但它仍然失败。
我试过这个控制器动作:
def edit
if params[:id].to_i == 0
name = params[:id].to_s.titleize
@business = Business.find_by_name!(name)
else
@business = Business.find(params[:id])
end
respond_with(@business)
end
一个不存在的 ID,它确实显示了 404。
如果你问为什么会出现这样的情况,我也会让这个动作响应“id”参数的字符串。
应用程序控制器中的此代码接收任何 ActiveRecord::RecordNotFound:
rescue_from ActiveRecord::RecordNotFound, :with => :record_not_found
private
def record_not_found
render :text => "404 Not Found Baby!", :status => 404
end
为什么我的 404 测试没有通过?