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