rspec rails测试:如何强制ActiveJob作业在某些测试中内联运行?

use*_*395 7 ruby rspec ruby-on-rails rails-activejob

我希望我的后台作业能够内联运行某些标记测试.我可以通过包装测试来实现,perform_enqueued do但我希望能够使用元数据标记它们,如果可能的话,它会自动发生.

我尝试过以下方法:

it "does everything in the job too", perform_enqueued: true do
end

config.around(:each) do |example|
  if example.metadata[:perform_enqueued]
    perform_enqueued_jobs do
      example.run
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但它会导致错误:

undefined method `perform_enqueued_jobs=' for ActiveJob::QueueAdapters::InlineAdapter:Class
Run Code Online (Sandbox Code Playgroud)

thi*_*ign 11

在你的spec/rails_helper.rb

RSpec.configure do |config|
  # ...
  config.include ActiveJob::TestHelper
end
Run Code Online (Sandbox Code Playgroud)

或者在你的测试中:

context "when jobs are executed" do
  include ActiveJob::TestHelper

  # ...
end
Run Code Online (Sandbox Code Playgroud)

然后在你的测试中:

perform_enqueued_jobs do
  example.run
end
Run Code Online (Sandbox Code Playgroud)


Seb*_*oro 6

您需要为ActiveJob::QueueAdapters::TestAdapter响应的测试设置适配器.perform_enqueued_jobs =。您可以在spec/rails_helper.rb文件上执行此操作:

ActiveJob::Base.queue_adapter = :test
Run Code Online (Sandbox Code Playgroud)