我有许多使用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)
我错过了什么/做错了什么?
答案 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
无关紧要