0

ネストされたリソースで適切に実行されるように仕様を設定しようとしています。

これは私が適切に設定しようとしているテストコードです

it "redirects to the created unit" do
    post :create, {:course_id => @course.id , :unit => valid_attributes}
    response.should redirect_to(course_unit_path(@course, Unit.last))
end

これは基本的に、「コース」のネストされたリソース「ユニット」を作成しようとする必要があります。残念ながら、すべてのPOSTDELETEおよびPUTテストで次のエラーが発生します

Failure/Error: post :create, {:course_id => @course.id , :unit => valid_attributes}
 NoMethodError:
   undefined method `unit_url' for #<UnitsController:0x000000059f1000>

unit_urlはcourse_unit_urlである必要があるため、これは理にかなっていますが、RSpecがそれを呼び出しています...

RSpecに正しい名前のパスを選択させるにはどうすればよいですか?すべてのGETテストで、手動で:course_idに合格しました。

4

1 に答える 1

0

これは私がしたことです:

it "redirects to the created unit" do
  unit_id = "barry"
  Unit.any_instance.should_receive(:save).and_return(true)
  Unit.any_instance.stub(:id).and_return(unit_id)
  post :create, {:course_id => @course.to_param , :unit => valid_attributes}
  response.should redirect_to(course_unit_path(@course, unit_id))
end

このテストのポイントは、新しいモデルを作成してリダイレクトすることではなく、単にリダイレクトすることであると判断しました。新しいモデルを確実に作成するための別の仕様があります。このアプローチのもう1つの利点は、データベースにアクセスしないため、実行速度が少し速くなることです。

それがお役に立てば幸いです。

編集:

私はまた、私のbefore :eachセクションにこれが関連している可能性があることに気づきました:

Course.stub!(:find).and_return(@course)

もう一度編集します。

この場合、問題のある呼び出しを行っていたコントローラーにコードがありました。以下のコメントによる。

于 2013-01-19T20:10:33.700 に答える