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

时间:2012-02-01 15:08:42

标签: ruby-on-rails rspec mocking cucumber

我希望能够在我的一些测试中模拟geocoder gem的结果。

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

我知道有一些宝石用于做类似的事情,例如sunspot_test sunspot。地理编码器有什么类似的东西吗?

2 个答案:

答案 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