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)
您需要为ActiveJob::QueueAdapters::TestAdapter响应的测试设置适配器.perform_enqueued_jobs =。您可以在spec/rails_helper.rb文件上执行此操作:
ActiveJob::Base.queue_adapter = :test
Run Code Online (Sandbox Code Playgroud)