0

我为控制器编写了一个测试,最近不得不稍微重构一下新方法。我的旧测试失败了,我不知道为什么它没有通过。我是测试新手,所以我的理解有限。

我下面的方法基本上接收一个slug_text参数。从 中slug_text,我们可以获得地点的 id 及其类型(多态)。使用这些值,我们可以在数据库中找到记录。

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

这个测试应该检查我方法的最后两行,并确保我提取了正确的记录。

我是否错误地place_type作为符号传入,此外,我必须传入:slug_text还是可以开始测试任何行?

4

0 回答 0