使用rSpec测试delayed_job链的最佳方法是什么?

时间:2011-08-11 18:27:59

标签: ruby-on-rails ruby 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中,是否有更好的方法来处理这种和/或链式方法?

3 个答案:

答案 0 :(得分:27)

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

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

然后你就可以进行正常的模拟检查:

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

答案 1 :(得分:2)

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

Stubbing Chained Methods with Rspec

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

答案 2 :(得分: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

将延迟作业设置为false,您可以像简单的

一样对其进行测试
相关问题