これはコントローラーのスペックファイルにあります
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のテストに合格しないのはなぜですか?