黄瓜 - 立即执行ActiveJob`perse_later`工作

时间:2016-11-10 00:51:29

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

我有许多使用perform_later调用其他嵌套作业的作业。但是,在对Cucumber进行的一些测试中,我希望在完成测试后立即执行这些工作。

我认为添加

就足够了
# features/support/active_job.rb
World(ActiveJob::TestHelper)

并在步骤定义文件中使用此作业调用作业

perform_enqueued_jobs do
  # call step that calls MyJob.perform_later(*args)
end

但是我遇到了类似的事情

undefined method `perform_enqueued_jobs' for #<ActiveJob::QueueAdapters::AsyncAdapter:0x007f98fd03b900> (NoMethodError)

我错过了什么/做错了什么?

2 个答案:

答案 0 :(得分:1)

我在测试中切换到:test adapter,它对我来说很有用:

# initialisers/test.rb

config.active_job.queue_adapter = :test

# features/support/env.rb

World(ActiveJob::TestHelper)

答案 1 :(得分:0)

只要你在黄瓜步骤中调用.perform_now,即使内部有.deliver_later的嵌套作业,它也会起作用

#support/active_job.rb
World(ActiveJob::TestHelper)

#my_job_steps.rb
Given(/^my job starts$/) do
  MyJob.perform_now(logger: 'stdout')
end

#jobs/my_job.rb
...
MyNestedJob.perform_later(*args) # is triggered during the step
...

另外,在我的environment/test.rb文件中,我没有写任何关于ActiveJob的内容,默认情况下工作正常。我相信测试的默认适配器为:inline,因此调用.deliver_later _now无关紧要