Rails测试触发Sidekiq警告



我在Sidekiq工作程序中有以下方法:

def self.schedule_edits(course:, editing_user:, enrollment_results:)
puts editing_user.id
perform_async(course.id, editing_user.id, enrollment_results)
end

我有一个控制器测试,当它调用此代码时,会抛出以下警告:

WARN: Job arguments to MassEnrollmentWorker do not serialize to JSON safely. This will raise an error...

我已经读到了这里的警告,我猜registration_results是一个冒犯性的论点。然而,当我运行测试并输出enrollment_results时,我看到的是:

{"FirstUser"=>{:success=>"User added to course."}, "SecondUser"=>{:success=>"User added to course."}, "NotARealUserOnWikipedia"=>{:failure=>"Not an existing user."}

这似乎是一个有效的散列,那么问题出在哪里呢?

注意关于符号的部分。

https://github.com/mperham/sidekiq/wiki/Best-Practices#1-使你的工作参数小而简单的

传递给perform_async的参数必须由简单的JSON数据类型组成:字符串、整数、浮点、布尔、null(nil(、数组和哈希。这意味着您不能将ruby符号用作参数。

在我的案例中,我只需要将哈希映射的格式更改为字符串rocket=>风格

发件人:

Sidekiq::Client.push('class' => 'RecordOrderJob', 'args' => { foo: 'bar' })

至:

Sidekiq::Client.push('class' => 'RecordOrderJob', 'args' => { 'foo' => 'bar' })

只需避免散列中的符号。

为子孙后代;我通过改变哈希的构建方式来解决这个问题:

{"FirstUser"=>{:success=>"User added to course."}, "SecondUser"=>{:success=>"User added to course."}, "NotARealUserOnWikipedia"=>{:failure=>"Not an existing user."}

到。。。

{"FirstUser"=>{"success"=>"User added to course."}, "SecondUser"=>{"success"=>"User added to course."}, "NotARealUserOnWikipedia"=>{"failure"=>"Not an existing user."}

最新更新