Ruby sidekiq 的插件 sidekiq-grouping 测试问题。

279959599 · 2018年04月10日 · 最后由 279959599 回复于 2018年04月10日 · 950 次阅读

项目是用 sidekiq 做异步处理的,使用了 sidekiq-grouping 批量处理。现在正在写单元测试。已有功能代码不可以修改的情况下,我做的单元测试遇到的问题。 work 的定义大致如下

class LogUpdateWorker
  include Sidekiq::Worker

  def perform(group)
    code
  end
end

调用 work 代码大致如下

LogUpdateWorker.perform_async(100, { :a => 1})

问题来了,定义 work 的时候我们可以看到传入参数只有一个。调用的时候传入了俩个参数。rails 项目跑着没问题。我也看了下,传入多个参数的时候,应该是被 sidekiq-grouping 处理过了,做了类似*group,传入不定参数的处理。 我的单元测试用 Sidekiq::Testing.inline! 这种方式 或者用默认的方式然后手动 drain 执行异步处理,都会报传入参数错误。 wrong number of arguments (given 2, expected 1)

def perform_async(*args)
  @klass.client_push(@opts.merge('args' => args, 'class' => @klass))
end

sidekiq 源码的定义这样定义的。看来问题应该在 sidekiq/testing 上 继续等大神指点迷津

2 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号