假设我在 Store 的模型中有这个非常简单的方法:
def geocode_address
loc = Store.geocode(address)
self.lat = loc.lat
self.lng = loc.lng
end
如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。
谢谢!
特里斯坦
最佳答案
使用内置模拟和 stub 的 rspecs,你可以做这样的事情:
setup do
@subject = MyClass.new
end
it 'handles geocoder success' do
mock_geo = mock('result', :lat => 1, :lng => 1)
Store.stub!(:geocode).and_return mock_geo
@subject.geocode_address
@subject.lat.should == mock_geo.lat
@subject.lng.should == mock_geo.lng
end
it 'handles geocoder errors' do
Store.stub!(:geocode).and_raise Exception
@subject.geocode_address
@subject.lat.should == _something_reasonable_
@subject.lng.should == _something_reasonable_
end
关于ruby-on-rails - 在这种情况下我如何模拟一个对象?没有明显的方法可以用模拟替换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4869078/