我怎样才能选择模拟地理编码器?

我希望能够在我的一些测试中模拟地理编码器 gem的结果。

我使用RSpec和Cucumber。 在黄瓜中,我想默认模仿Geocoder结果,但是可以通过添加标签再次打开它。 那将是完美的! RSpec类似的东西也会很好。 它会极大地加速我的测试。

我知道有一些gem用于做类似的事情,例如太阳黑子的 sunspot_test 。 地理编码器有类似的东西吗?

我使用vcr gem进行远程服务,请查看! 它在您的情况下非常有用。 github.com/myronmarston/vcr

您可以使用mocha来存根和模拟调用。 如果你做了类似的事情(我只是因为我不知道GeoCoder语法而这样做):

 GeoCoder.get_data(x, y) 

这是你想要的东西,并强制返回别的东西,摩卡允许你这样做:

 GeoCoder.stubs(:get_data).with(x, y).returns(my_own_variable) 

这将调用GeoCode.get_data,当传入x和y时,返回自定义变量。 但是,此测试将在测试期间持续进行所有后续调用,因此您可以通过调用以下方式取消存储:

 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