【问题标题】:Test that Delayed Job is called测试是否调用了延迟作业
【发布时间】:2018-03-25 09:36:08
【问题描述】:

我正在尝试测试我的部分代码是否正在运行 DelayedJob。 代码如下:

def start_restream
  ...
  puts 'Here'
  Delayed::Job.enqueue(Restream::StartAllJob.new(channel.id))
  puts 'After'
  ...
end

#app/jobs/restream/start_all_job.rb
class Restream::StartAllJob < Struct.new(:channel_id)
  def perform
    puts "Inside"
    ...
  end
end

在我的spec_helper.rb 中有Delayed::Worker.delay_jobs = false。 规格:

it 'runs Delayed::Job::Restream::StartAll' do
  post :start_restream, :id => channel.id
  expect(Restream::StartAllJob).to receive(:new)
end

打印出来

Here
Inside
After

运行时,所以我知道它被调用了。但测试失败:

Failure/Error: expect(Restream::StartAllJob).to receive(:new) 

(Restream::StartAllJob (class)).new(*(any args))
       expected: 1 time with any arguments
       received: 0 times with any arguments

或者,如果我使用expect_any_instance_of(Restream::StartAllJob).to receive(:perform),它会说

Failure/Error: example.run
       Exactly one instance should have received the following message(s) but didn't: perform

我做错了什么,我该如何测试?

【问题讨论】:

    标签: ruby-on-rails rspec delayed-job


    【解决方案1】:

    这只是我在订单上犯的错误: expect(Restream::StartAllJob).to receive(:new)应该写在post :start_restream, :id =&gt; channel.id之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-22
      • 2013-10-30
      • 1970-01-01
      • 2011-09-15
      • 2016-03-29
      • 2018-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多