【问题标题】:How do I stub a mix-in method in RSpec如何在 RSpec 中存根混合方法
【发布时间】:2012-11-25 17:20:52
【问题描述】:

我正在使用 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! 存根。

提前致谢。

【问题讨论】:

    标签: ruby rspec tdd mongoid


    【解决方案1】:

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

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

    【讨论】:

    • 或者更好的是有一个方法可以存根任何对象的save! 方法,如果它有一个save! 方法,例如:gist.github.com/4145069
    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2013-03-01
    • 2015-08-30
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多