如何在RSpec中存根混合方法

时间:2012-11-25 17:20:52

标签: ruby rspec tdd mongoid

我正在使用Mongoid类将Ruby对象持久化到MongoDB。示例对象:

class Option
  include Mongoid::Document

  field :name, type: String
  field :created_at, type: Time, default: ->{ Time.now }

end

在我的测试中,我发现自己在创建后存根实例,以避免对象击中mongo:

o1 = Option.new
o1.stub(:save!).and_return true #stub method
o1.name = 'red'
o1.save!

显而易见的问题是我需要为每个实例执行此操作。有没有办法可以存储Mongoid::Document.save!方法,即混合输入?这样我就可以知道使用混合的任何文档都会有save!存根。

提前致谢。

1 个答案:

答案 0 :(得分:1)

当然,您可以使用monkeypatch Mongoid::Document,但我建议不要这样做,其他测试可能需要原始save!。可以通过工厂方法减轻重复存根的不便:

def option_with_stubbed_save
  option = Option.new
  option.stub(:save!).and_return true
  option
end