我希望能够在我的一些测试中模拟geocoder gem的结果。
我使用RSpec和Cucumber。在黄瓜中,我想默认模仿Geocoder结果,但是可以通过添加标签再次打开它。那将是完美的!对RSpec来说类似的东西也会很好。它会极大地加速我的测试。
我知道有一些宝石用于做类似的事情,例如sunspot_test sunspot。地理编码器有什么类似的东西吗?
答案 0 :(得分:3)
您可以使用mocha来存根和模拟通话。如果你做了类似的事情(我只是为了解决这个问题,因为我不知道GeoCoder的语法):
GeoCoder.get_data(x, y)
这就是你想要发布并强制返回其他内容的东西,mocha允许你这样做:
GeoCoder.stubs(:get_data).with(x, y).returns(my_own_variable)
当在x和y中传递时,这将调用GeoCode.get_data以返回自定义变量。但是,此测试将在测试期间持续进行所有后续调用,因此您可以通过调用以下方式取消存储:
GeoCoder.unstub(:get_data)
这完全恢复了正常的方法。
就Rspec而言,在拆解块中你可以取消存储。就Cucumber而言,你可以在场景之前添加像@stubs_geocoder这样的标签,在features/support/env.rb
中你可以添加这个:
Before('@stubs_geocoder') do
# add your stub calls
end
After('@stubs_geocoder') do
# unstub
end
答案 1 :(得分:1)
我使用vcr
gem进行远程服务,请查看!它在你的情况下非常有用。 github.com/myronmarston/vcr