【问题标题】:Jobs aren't performed. Ruby on Rails作业未执行。 Ruby on Rails
【发布时间】:2016-03-17 09:33:37
【问题描述】:

我想编写测试以检查是否执行了作业。如下所示:

test/jobs/send_remember_email_job_test.rb

test "remember method was sent" do

  assert_performed_jobs 0

  assert_enqueued_jobs 1 do
    SendRememberEmailJob.perform_later('some@mail.com', 0)
  end

  assert_performed_jobs 1

end

app/jobs/send_remember_email_job.rb

class SendRememberEmailJob < ActiveJob::Base
  queue_as :default

  def perform(email,time, task)
    UserMailer.delay(run_at:time.hours.from_now).remember_mail(email,task)
  end
end

当我运行测试时,我总是遇到 1 次失败:

1 jobs expected, but 0 was performed.
Expected: 1
Actual: 0

我不知道它是否有帮助,但我使用 delayed_job。提前致谢

【问题讨论】:

  • 延迟作业将 db 写入具有 last_error 列的 delayed_jobs 表。如果对您没有帮助,请查看其价值并在此处发布。
  • 检查 last_error 列?当 rails 不在数据库中存储测试变量时,我想怎么做。在开发中一切正常,但这里的测试失败了。还有其他想法吗?
  • 您是否尝试将SendRememberEmailJob.perform_later('some@mail.com', 0) 更改为SendRememberEmailJob.perform_now('some@mail.com', 0)
  • 是的......它没有帮助

标签: ruby-on-rails minitest rails-activejob


【解决方案1】:

这个问题可能会发生,因为delayed_jobs 运行默认是后台进程中的作业,所以您的测试不会等待它完成测试失败。 尝试禁用 DelayedJobs,以便作业实时运行。

你可以这样做:

Delayed::Worker.delay_jobs = false

【讨论】:

  • 不幸的是,不是这样......此外,我检查排队作业的其他测试失败了。
最近更新 更多