我的测试用例如下:
petition1 = Petition.create
petition2 = Petition.create
petition1.should_receive(:test_method).with(7).and_return(50.0)
petition2.should_receive(:test_method).with(7).and_return(25.0)
petition1.test_method(7) # => 50.0
Petition.first.test_method(7) # => 0.0
petition2.test_method(7) # => 25.0
Petition.last.test_method(7) # => 0.0
如何直接从数据库中检索记录的存根方法调用?
我在单元测试中迭代记录,我需要对某些记录进行方法调用才能返回特定的响应。
答案 0 :(得分:0)
这里的问题是(正如您所发现的)调用find方法将创建Petition
的新实例。为了解决这个问题,你可以自己查找find方法,只返回你想要的对象:
let(:petition1) { Petition.create }
let(:petition2) { Petition.create }
it "does what I want" do
Petition.stub(:first) { petition1 }
Petition.stub(:last) { petition2 }
petition1.should_receive(:test_method).with(7).and_return(50.0)
petition2.should_receive(:test_method).with(7).and_return(25.0)
# test code
end
不幸的是,这会将规范与您正在测试的任何方法的实现相结合。如果你使用其他方式获得请愿,这可能会破裂。更具弹性的方法可能会改为使用工厂,并使用适当的属性创建请求。