rspec 3 - odgnij metodę klasową


97

Uaktualniam z rspec 2.99 do rspec 3.0.3 i przekonwertowałem metody instancji do użycia allow_any_instance_of, ale nie wiem, jak odgiąć metodę klasy. Mam taki kod:

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

a mój test rspec 2 robi to:

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

Jak to robi Rspec 3?

Odpowiedzi:


173

Powinieneś zrobić

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

Sprawdź skróty metody doco .


Próbuję to zaimplementować, ale kiedy piszę tę makietę, a następnie piszę expect(Class.foo).to eq(bar), otrzymuję „błąd z niewłaściwą liczbą argumentów”, ponieważ foometoda zwykle wymaga 2 argumentów ... ale chcę tylko, aby zwróciła to, co umieściłem w kodzie
sixty4bit

FWIW, ten formularz spowodowałby awarię mojego interpretera ruby. Jednak and_return nie jest ściśle potrzebne i można je pominąć. (Mój interpreter ruby ​​również się nie zawiesza.)
Ray Fix

2
@ sixty4bit Czy jest jakiś powód, dla którego nie możesz tego nazwać argumentami?
David Moles

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.