rspec 3 - rintisan metode kelas


95

Saya mengupgrade dari rspec 2.99 ke rspec 3.0.3 dan telah mengonversi metode instance untuk digunakan allow_any_instance_of, tetapi belum menemukan cara untuk menghentikan metode kelas. Saya punya kode seperti ini:

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

dan tes rspec 2 saya melakukan ini:

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

Apa cara Rspec 3 untuk melakukan ini?

Jawaban:


172

Kamu seharusnya melakukan

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

Lihat rintisan Metode doco .


Saya mencoba menerapkan ini tetapi ketika saya menulis tiruan itu dan kemudian menulis expect(Class.foo).to eq(bar)saya mendapatkan "kesalahan jumlah argumen" karena foometode biasanya menginginkan 2 argumen .... tetapi saya hanya ingin mengembalikan apa yang saya masukkan ke dalam rintisan
sixty4bit

FWIW, formulir ini akan merusak penerjemah ruby ​​saya. Namun, and_return tidak sepenuhnya dibutuhkan dan dapat ditinggalkan. (Penerjemah ruby ​​saya juga tidak crash.)
Ray Fix

2
@ sixty4bit Adakah alasan Anda tidak dapat menyebutnya dengan argumen?
David Moles

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.