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

Kev*_*ang 9 ruby rspec ruby-on-rails stubbing geocode

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

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

before(:each)之前做
User.stub!(:geocode).and_return([1,1])结束

但是,当我运行我的测试时,它仍然似乎在呼唤地理编码.我究竟做错了什么?

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

Vas*_*ich 9

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

Spec::Runner.configure do |config|
  config.mock_with :mocha
end
Run Code Online (Sandbox Code Playgroud)

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

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

before(:each) do
 User.any_instance.stub(:geocode).and_return([1,1]) 
end
Run Code Online (Sandbox Code Playgroud)

  • 如果您只关心:geocode的返回值,则此方法有效.但是地理编码器模块实际上更新了对象的纬度和经度.我该怎么说出来呢? (2认同)