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 메소드 스텁을 확인하십시오 .


나는 이것을 구현하려고하는데 그 mock을 작성하고 쓸 때 메소드가 일반적으로 2 개의 인수를 원 expect(Class.foo).to eq(bar)하기 때문에 "잘못된 수의 인수 오류"가 발생합니다 foo.
sixty4bit 2015 년

FWIW,이 양식은 내 루비 인터프리터를 충돌시킬 것입니다. 그러나 and_return은 반드시 필요한 것은 아니며 생략 할 수 있습니다. (내 루비 인터프리터도 충돌하지 않습니다.)
레이 수정

2
@ sixty4bit 인수로 호출 할 수없는 이유가 있습니까?
David Moles 2015 년

4
@ sixty4bitexpect(Class.foo).to receive(bar).with(arg1, arg2).and_return({..object})
zhisme
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.