0

コントローラーのテストを作成しましたが、最近、新しいメソッドを少しリファクタリングする必要がありました。以前のテストが失敗し、なぜ合格しないのかわかりません。私はテストに慣れていないので、私の理解は限られています。

以下の私のメソッドは、基本的にパラメーターを受け取ります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必要がありますか? または、任意の行のテストを開始できますか?

4

0 に答える 0