rspec 3-クラスメソッドのスタブ


94

rspec 2.99からrspec 3.0.3にアップグレードし、インスタンスメソッドを使用するように変換し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の方法は何ですか?

回答:


172

やったほうがいい

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

doco メソッドのスタブを確認してください。


私はこれを実装しようとしていますが、そのモックを書き込んでから書き込むとexpect(Class.foo).to eq(bar)fooメソッドは通常2つの引数を必要とするため、「間違った数の引数エラー」が発生します。
sixty4bit 2015年

FWIW、このフォームはルビーのインタープリターをクラッシュさせます。ただし、and_returnは必ずしも必要ではなく、省略できます。(私のルビインタプリタもクラッシュしません。)
レイフィックス

2
@ sixty4bit引数を付けて呼び出せない理由はありますか?
David Moles

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.