rspec 3-对类方法进行存根


94

我正在从rspec 2.99升级到rspec 3.0.3,并已将实例方法转换为use allow_any_instance_of,但是还没有弄清楚如何对类方法进行存根。我有这样的代码:

module MyMod
  class Utils
    def self.find_x(myarg)
      # Stuff
    end
  end
end

我的rspec 2测试做到了:

MyMod::Utils.stub(:find_x).and_return({something: 'testing'})

Rspec 3的实现方式是什么?

Answers:


172

你应该做

allow(MyMod::Utils).to receive(:find_x).and_return({something: 'testing'})

检查doco 方法存根


我正在尝试实现这一点,但是当我编写该模拟然后编写时,expect(Class.foo).to eq(bar)我收到“错误数量的参数错误”,因为该foo方法通常需要2个参数....但是我只希望它返回我放入存根中的内容
2015年

FWIW,这种形式会使我的红宝石解释器崩溃。但是,并不一定需要and_return,可以将其保留。(我的红宝石解释器也不会崩溃。)
Ray Fix

2
@ sixty4bit是否有理由不能使用参数调用它?
David Moles 2015年

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.