在RSpec单元测试期间存根地址编码

时间:2011-04-13 06:46:59

标签: ruby-on-rails ruby rspec geocode stubbing

我正在使用geocoder gem为我的一个Active Record模型类添加地理编码功能。这很好用,但我实际上并不希望在单元测试期间触发地理编码。

我已经尝试通过将其添加到我的RSpec测试来删除对地理编码的调用:

  

之前(:每个)做
    User.stub!(:地址解析).and_return([1,1])   端

然而,当我运行我的测试时,它似乎仍然在呼唤地理编码。我做错了什么?

仅供参考,如果我在实例级别存根(例如some_user.stub!而不是User.stub!),这一切都有效。

2 个答案:

答案 0 :(得分:9)

如果要在实例级别上使用存根,则应使用除RSpec之外的其他模拟框架。例如mocha(将以下内容添加到spec/spec_helper.rb):

Spec::Runner.configure do |config|
  config.mock_with :mocha
end

http://rspec.info/documentation/mocks/other_frameworks.html

现在,您可以在测试中使用any_instance

before(:each) do
 User.any_instance.stub(:geocode).and_return([1,1]) 
end

答案 1 :(得分:3)

它的

before(:each) do 
  Address.any_instance.stubs(:geocode).returns([1,1])
end

与摩卡。