使用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中的方法?

我们可以在前面的块中再添加一行,如下所示:

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

然后,您可以进行正常的模拟检查,如下所示:

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

以下是有关rSpec链接方法的一些讨论,我发现这些方法很有帮助:

使用Rspec连接链式方法

http://groups.google.com/group/rspec/browse_thread/thread/6b8394836d2390b0#

 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 

将延迟作业设置为false,您可以像简单一样对其进行测试