我为控制器编写了一个测试,最近不得不稍微重构一下新方法。我的旧测试失败了,我不知道为什么它没有通过。我是测试新手,所以我的理解有限。
我下面的方法基本上接收一个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
还是可以开始测试任何行?