rspec 3 - заглушить метод класса


97

Я обновляюсь с 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?

Ответы:


173

Ты должен сделать

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

Загляните в заглушки doco Method .


Я пытаюсь реализовать это, но когда я пишу этот макет, а затем пишу, expect(Class.foo).to eq(bar)я получаю «ошибку неправильного количества аргументов», потому что fooметод обычно требует 2 аргумента .... но я просто хочу, чтобы он возвращал то, что я вставил в заглушку
sixty4bit 05

FWIW, эта форма приведет к сбою моего интерпретатора ruby. Однако 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.