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 аргументи .... але я просто хочу, щоб він повернув те, що я помістив у заглушку
шістдесят біт

FWIW, ця форма зірве мого рубінного перекладача. Однак and_return не є строго необхідним і його можна залишити. (Мій перекладач рубінів також не розбивається.)
Рей Фікс,

2
@ sixty4bit Чи є причина, що ви не можете назвати це аргументами?
Девід Молес

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.