2014-09-02 13 views
7

Questo è il mio scenario:Come ignorare alcune chiamate allo stesso metodo con argomenti diversi in Rspec?

Dopo aver aggiornato un oggetto AR, viene generato un gruppo di lavori in background con Resque. In mie specifiche sto beffardo la chiamata a Resque # enqueue, qualcosa nelle linee di:

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 

Come potete vedere, ho bisogno di prendere in giro tutte le altre chiamate verso Resque # enqueue ogni volta che voglio prendere in giro una specifica call, c'è un modo per prendere in giro solo una chiamata personalizzata e ignorare le altre chiamate con argomenti diversi?

Grazie in anticipo;)

+0

Penso che quello che hai già pubblicato dovrebbe funzionare: qual è il problema? –

+0

Ciao Frederick, il problema era che avevo bisogno di aggiungere tutte quelle schifezze ogni dove quando volevo prendere in giro una chiamata Resque specifica. – rdavila

risposta

10

Penso che in questo caso si avrebbe bisogno di fare quello che penso come il metodo stubbing equivalente di as_null_object, ma in questo caso specifico per le chiamate verso Resque.enqueue che non si ha a riguardo:

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

Grazie per il tuo aiuto Paolo, sto usando Rspec 2 quindi #allow e #receive non sono disponibili ma li ho sostituiti con 'Resque.stub (: enqueue) .and_return (true)' e 'Resque.should_receive (: enqueue) .with (PublishJob, qualsiasi cosa) ' – rdavila