コントローラーのテストを作成しましたが、最近、新しいメソッドを少しリファクタリングする必要がありました。以前のテストが失敗し、なぜ合格しないのかわかりません。私はテストに慣れていないので、私の理解は限られています。
以下の私のメソッドは、基本的にパラメーターを受け取りますslug_text
。から、slug_text
場所の ID とそのタイプ (ポリモーフィック) を取得できます。これらの値を使用して、DB 内のレコードを見つけることができます。
def new
@slug = params[:slug_text]
place_id = Slug.where(name: @slug).first.sluggable_id.to_i
place_type = Slug.where(name: @slug).first.sluggable_type.to_s
@klass = place_type.classify.constantize
@place = @klass.find(place_id)
end
アクションはビューで機能しているように見えますが、私のテストは失敗し続けていexpects 1, but receives 0
ます。
it "sends the query to the correct class" do
Hotel.should_receive(:find).with(1)
get :new, place_type: "Hotel", id: 1
end
このテストでは、メソッドの最後の 2 行をチェックし、正しいレコードを取得していることを確認する必要があります。
シンボルとして間違って渡しplace_type
ていますか? さらに、渡す:slug_text
必要がありますか? または、任意の行のテストを開始できますか?