我正在尝试使用模型的 rspec 模拟在控制器上创建测试,它似乎只有在我说
Type.any_instance.should_recieve(...)
代替
instancename.should_receive(...)
我的代码看起来像这样。(通常我使用FactoryGirl,但我不在这个例子中以确保它不是问题)
it "calls blah on foo" do
foo = Foo.new
foo.save
foo.should_receive(:blah) #this fails because it's called 0 times
#Foo.any_instance.should_receive(:blah) #this would succeed
post :create, {:foo => foo}
end
在我的控制器中
def create
foo = Foo.find_by_id(params[:foo])
foo.blah
#other stuff thats not related
end
我知道我可以模拟 Foo.find_by_id 并让它返回 foo,但我觉得我不需要这样做,因为它应该被返回,这意味着如果我停止使用 find_by_id,测试就会中断,这真的不是一个重要的细节。
知道我做错了什么吗?如果我不必到处都说 any_instance 并且不必模拟 find_by_id,我觉得我的测试会更好。