2011-08-11 10 views
12

Obecnie, kiedy mam sposób opóźniony w moim kodu jak poniżej:Jaki jest najlepszy sposób przetestowania łańcuchów delayed_job za pomocą programu rSpec?

CommentMailer.delay.deliver_comments(@comment, true) 

piszę coś takiego w moim specyfikacji:

dj = mock("DelayProxy") 
CommentMailer.should_receive(:delay).and_return(dj) 
dj.should_receive(:deliver_comments).with(comment, true) 

Czy istnieje lepszy sposób, aby sobie z tym poradzić i/lub przykuty metod takich jak w rSpec w ogóle?

Odpowiedz

27

Możemy tylko mieć jeszcze jedną linię w przed bloku w następujący sposób:

CommentMailer.stub(:delay).and_return(CommentMailer) 

Wtedy możesz mieć normalną próbę sprawdzić w następujący sposób:

CommentMailer.should_receive(:deliver_comments).with(comment, true) 
+0

Korzystanie 'stub' ze starego' rspec-drwi składni should' bez wyraźnego umożliwiając składnia jest przestarzałe w rspec-3. To wydaje się działać 'oczekiwać (CommentMailer) .to otrzymać (: opóźnienie) .and_return (CommentMailer)'. Jeśli nie chcesz jawnie go testować, możesz użyć 'allow' zamiast' spodziewać'. – Pete

0
describe '#perform' do 
    subject do 
     Delayed::Worker.delay_jobs = false 
     proc { worker.perform() } 
    end 

    it { is_expected.to change { ActionMailer::Base.deliveries.length }.by(2) } 
    end 

Set opóźniony praca jako fałszywe i u mogą przetestować go jak zwykłą

Powiązane problemy