rspec rails testing:如何强制 ActiveJob 作业内联运行某些测试?
Posted
技术标签:
【中文标题】rspec rails testing:如何强制 ActiveJob 作业内联运行某些测试?【英文标题】:rspec rails testing: how can I force ActiveJob job's to run inline for certain tests? 【发布时间】:2016-09-13 21:08:19 【问题描述】:我希望我的后台作业内联运行某些标记的测试。我可以通过使用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
但它会导致错误:
undefined method `perform_enqueued_jobs=' for ActiveJob::QueueAdapters::InlineAdapter:Class
【问题讨论】:
【参考方案1】:您需要将用于测试的适配器设置为ActiveJob::QueueAdapters::TestAdapter
,它会响应.perform_enqueued_jobs =
。您可以在 spec/rails_helper.rb
文件中执行此操作:
ActiveJob::Base.queue_adapter = :test
【讨论】:
【参考方案2】:在你的spec/rails_helper.rb
:
RSpec.configure do |config|
# ...
config.include ActiveJob::TestHelper
end
或者在你的测试中:
context "when jobs are executed" do
include ActiveJob::TestHelper
# ...
end
然后在你的测试中:
perform_enqueued_jobs do
example.run
end
【讨论】:
以上是关于rspec rails testing:如何强制 ActiveJob 作业内联运行某些测试?的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 3 上使用 Rspec 和 MongoID 清理或重置测试数据库
如何在 RSpec 测试中为 ActiveRecord 打开 SQL 调试日志记录?