2011-08-11 103 views
12

目前,當我有一個延遲的方法,在我的代碼如下所示:使用rSpec測試delayed_job鏈的最佳方法是什麼?

CommentMailer.delay.deliver_comments(@comment, true) 

我寫這樣的事情在我的規格:

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

有沒有更好的方式來處理這個和/或像rSpec中的鏈式方法一般?

回答

27

我們只是在以前塊多一個線如下:

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

然後,你可以有正常的模擬檢查如下:

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

使用'從RSpec的,嘲笑的老'stub':should'語法不顯式啓用語法在rspec-3中已棄用。這似乎工作'expect(CommentMailer).to接收(:延遲).and_return(CommentMailer)''。如果你不想明確地測試它,你可以使用'allow'而不是'expect'。 – 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 

設置延遲工作作爲虛假和u可以測試它喜歡簡單

相關問題