2014-09-02 42 views
7

To jest mój scenariusz:Jak zignorować niektóre wywołania tej samej metody z innym argumentem w Rspec?

Po aktualizacji obiektu AR, uruchamia kilka zadań tła z Resque. W moich specyfikacji mam szyderczy wezwanie do Resque # Kolejkuj, coś w rodzaju:

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 

Jak widać, muszę kpić wszystkie inne połączenia do Resque # enqueue każdym razem chcę drwić specyficzny zadzwoń, czy istnieje sposób na wyśmiewanie tylko połączenia niestandardowego i ignorowanie innych połączeń za pomocą różnych argumentów?

góry dzięki;)

+0

Myślę, że to, co już napisałeś, powinno działać - o co chodzi? –

+0

Witam, Frederick, chodziło o to, że muszę dodać wszystkie te drwiny w każdym miejscu, w którym chciałem wykpić konkretną rozmowę Resque. – rdavila

Odpowiedz

10

Myślę, że w tym przypadku trzeba by robić to, co uważam za równowartość metoda stubbing z as_null_object, ale w tym wypadku specjalnie dla połączeń do Resque.enqueue że nie Dbaj o:

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

Dzięki za pomoc Paul, używam Rspec 2, więC#allow i #receive nie są dostępne, ale zastąpiłem je 'Resque.stub (: enqueue. .and_return (true)' oraz 'Resque.should_receive (: enqueue) .with (PublishJob, cokolwiek) ' – rdavila