2014-09-02 7 views
7

이것은 내 시나리오입니다.Rspec에서 다른 인수를 사용하여 동일한 메소드에 대한 호출을 무시하는 방법은 무엇입니까?

AR 개체를 업데이트하면 Resque로 백그라운드 작업이 실행됩니다. 당신은 내가 특정 조롱 할 Resque # 엔큐 매번 다른 모든 통화를 조롱 할 필요가 볼 수 있듯이

it 'should be published' do 
    # I need to setup these mocks in many places where I want to mock a specific call to Resque, otherwise it fails 
    Resque.should_receive(:enqueue).with(NotInterestedJob1, anything) 
    Resque.should_receive(:enqueue).with(NotInterestedJob2, anything) 
    Resque.should_receive(:enqueue).with(NotInterestedJob3, anything) 

    # I'm only interested in mocking this Resque call. 
    Resque.should_receive(:enqueue).with(PublishJob, anything) 
end 

: 내 사양에서 나는의 라인 # 엔큐, 뭔가를 Resque에 대한 호출을 조롱하고있어 호출, 사용자 지정 호출을 모의하고 다른 인수를 사용하여 다른 호출을 무시하는 방법이 있습니까? 사전에

감사합니다;) 나는이 경우 당신은 내가 as_null_object의 방법 스터 빙 동등한 같은 생각 일을 할 필요가 있다고 생각

+0

내가 게시 한 내용이 효과가 있다고 생각합니다. 문제가 무엇인가요? –

+0

안녕하세요. Frederick, 문제는 모든 Resque 호출을 모의하고 싶을 때마다 모든 mock을 모두 추가해야한다는 것이 었습니다. – rdavila

답변

10

하지만,이 경우 특별히 그렇게하지 Resque.enqueue에 통화 관심 분야 :

it 'should be published' do 
    allow(Resque).to receive(:enqueue) # stub out this message entirely 
    expect(Resque).to receive(:enqueue).with(PublishJob, anything) 
    call_your_method.that_calls_enqueue 
end 
+1

도움 주셔서 고마워 폴, 나는 Rspec 2를 사용하고 있으므로 #allow와 # receive는 사용할 수 없지만 'Resque.stub (: enqueue) .and_return (true)'및 'Resque.should_receive (: enqueue) .with (PublishJob, 뭐든지)' – rdavila