我为一个控制器写了一个测试,最近不得不重新调整一下这个新方法。我的旧测试失败了,我无法弄清楚它为什么没有通过。我是测试的新手,所以我的理解是有限的。
我的方法基本上接收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
这个测试应该检查我的方法的最后两行,并确保我正在拉正确的记录。
我是否错误地将place_type
作为符号传递,此外,我是否必须传入:slug_text
或者我是否可以开始测试任何一行?