2011-08-11 34 views
12

Hiện nay khi tôi có một phương pháp chậm trong mã của tôi như sau:Cách tốt nhất để kiểm tra chuỗi delay_job bằng rSpec là gì?

CommentMailer.delay.deliver_comments(@comment, true) 

tôi viết một cái gì đó như thế này trong spec của tôi:

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

Có cách nào tốt hơn để xử lý này và/hoặc phương pháp xích như vậy trong rSpec nói chung?

Trả lời

27

Chúng tôi chỉ có thể có một dòng ở những trước khối như sau:

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

Sau đó, bạn có thể có mô hình thông thường kiểm tra như sau:

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

Sử dụng 'stub' từ cũ 'rspec-mocks': Cú pháp should' mà không cho phép một cách rõ ràng là cú pháp không được chấp nhận trong rspec-3. Điều này dường như làm việc 'mong đợi (CommentMailer). Để nhận được (: chậm trễ) .and_return (CommentMailer)'. Nếu bạn không muốn kiểm tra nó một cách rõ ràng, bạn có thể sử dụng 'allow' thay vì' 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 

Set trì hoãn công việc như sai và u có thể kiểm tra nó như đơn giản

Các vấn đề liên quan