You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Rails 7.2.0后MiniTest出现Active Job适配器错误求助

Rails 7.2.0 + MiniTest + Sidekiq: 解决assert_no_enqueued_jobs报错问题

遇到的错误信息:

ArgumentError: assert_no_enqueued_jobs requires the Active Job test adapter, you're using ActiveJob::QueueAdapters::SidekiqAdapter.

以下是三种可行的解决思路:

  • 临时切换到Active Job测试适配器
    在测试环境的配置文件(如test/test_helper.rb)中全局设置测试适配器,或者针对单个测试类做局部切换:

    # 全局设置(test_helper.rb)
    ActiveJob::Base.queue_adapter = :test
    
    # 单测试类局部切换(避免影响其他测试)
    class YourTest < ActiveSupport::TestCase
      setup do
        @original_adapter = ActiveJob::Base.queue_adapter
        ActiveJob::Base.queue_adapter = :test
      end
    
      teardown do
        ActiveJob::Base.queue_adapter = @original_adapter
      end
    
      test "no jobs enqueued" do
        assert_no_enqueued_jobs
      end
    end
    

    Rails 7.2.0收紧了assert_no_enqueued_jobs这类断言的适配器校验,必须使用官方测试适配器才能触发断言逻辑。

  • 改用Sidekiq原生测试断言
    保持Sidekiq适配器不变,直接使用Sidekiq提供的测试方法替代Active Job的断言:

    # 确保已加载Sidekiq测试模块(test_helper.rb)
    require 'sidekiq/testing'
    
    class YourTest < ActiveSupport::TestCase
      setup do
        Sidekiq::Testing.fake! # 启用Sidekiq假测试模式
      end
    
      test "no jobs enqueued" do
        assert_no_jobs # 检查所有队列无任务
        # 或指定队列:assert_no_jobs queue: 'your_queue_name'
      end
    end
    
  • 升级Sidekiq依赖版本
    检查当前Sidekiq版本是否兼容Rails 7.2.0,建议升级到最新稳定版,旧版本的Sidekiq适配器可能未适配Rails 7.2新增的适配器校验逻辑。

内容的提问来源于stack exchange,提问作者Phil-6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 18:49:54