rspec 3 - bir sınıf yöntemini saplama


100

Rspec 2.99'dan rspec 3.0.3'e yükseltme yapıyorum ve örnek yöntemlerini kullanmak için dönüştürdüm allow_any_instance_of, ancak bir sınıf yöntemini nasıl saplayacağımı bulamadım. Bunun gibi bir kodum var:

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

ve rspec 2 testim bunu yapıyor:

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

Bunu yapmanın Rspec 3 yolu nedir?

Yanıtlar:


176

Yapmalısın

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

Doco Yöntemi taslaklarına göz atın .


Bunu uygulamaya çalışıyorum ama bu taklidi yazıp sonra yazdığımda expect(Class.foo).to eq(bar)"yanlış sayıda argüman hatası" alıyorum çünkü fooyöntem normalde 2 argüman istiyor ... ama sadece saplamaya koyduğum şeyi döndürmesini istiyorum.
sixty4bit

FWIW, bu form Ruby tercümanımı mahveder. Ancak, and_return kesinlikle gerekli değildir ve bırakılabilir. (Ruby tercümanım da çökmez.)
Ray Fix

2
@ sixty4bit Onu argümanlarla arayamamanızın bir nedeni var mı?
David Benler

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.