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が述べたように、be_successは2xx の範囲の http コードを想定し、リダイレクトは 3xx の範囲 (実際には 302) に分類されます。
アサーションを => response.should be_redirectに変更する必要があります。
ただし、この場合、応答がリダイレクトであることを確認してから、特定のページにリダイレクトされることを確認するのは冗長であるため、アサーションはもう必要ありません。