gpt4 book ai didi

ruby-on-rails - 在这种情况下我如何模拟一个对象?没有明显的方法可以用模拟替换对象

转载 作者:数据小太阳 更新时间:2023-10-29 07:12:25 26 4
gpt4 key购买 nike

假设我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com