如何为所有测试设置存根?

时间:2015-03-20 11:46:32

标签: ruby-on-rails ruby-on-rails-4 rspec rspec2

在控制器I中使用带有行的外部地理编码服务:

loc = Location.geocode(@event.raw_location)

我想为我的所有测试设置一个存根:

allow(Location).to receive(:geocode).with(nil).and_return({city: nil, state: nil, country: nil})

我应该把这段代码放在哪里?

1 个答案:

答案 0 :(得分:3)

您应该在before(:each)rails_helper.rb

中声明全局spec_helper.rb
RSpec.configure do |config|
  config.before(:each) do
    allow(Location).to receive(:geocode).with(nil).and_return({city: nil, state: nil, country: nil})
  end
end

编辑:

另外,如果你想运行这个' global' before(:each)仅针对涉及地理编码调用的测试,您可以写:

RSpec.configure do |config|
  config.before(:each, geocoding_mock: true) do
    allow(Location).to receive(:geocode).with(nil).and_return({city: nil, state: nil, country: nil})
  end
end

然后在你的测试中:

describe Location, geocoding_mock: true do
...
end