今天第一次给异步任务写测试,顺手把官方文档翻译了一下。
require 'sidekiq/testing'
Sidekiq::Testing.fake!
Sidekiq::Testing.inline!
Sidekiq::Testing.disable!
在 test 文件的头部添加这段代码后,若 test case 中有异步任务,sidekiq 不会将异步任务保存在 redis 中,而是保存在一个数组 jobs
中。
require 'sidekiq/testing'
Sidekiq::Testing.fake!
test case 范例
# jobs中的异步任务数为0
assert_equal 0, HardWorker.jobs.size
HardWorker.perform_async(1, 2)
# jobs中的异步任务数为1
assert_equal 1, HardWorker.jobs.size
使用 drain 方法,可以执行所有的异步任务
# 生成2个异步任务
HardWorker.perform_async(1, 2)
HardWorker.perform_async(2, 3)
assert_equal 2, HardWorker.jobs.size
# 执行所有异步任务
HardWorker.drain
# 异步任务总数为0
assert_equal 0, HardWorker.jobs.size
如果不打算执行,只想清空 jobs,可以使用 clear 方法
# 生成异步任务
HardWorker.perform_async(1, 2)
# 清空jobs中的所有异步任务
HardWorker.jobs.clear
assert_equal 0, HardWorker.jobs.size
在 test 文件的头部添加这段代码后,若 test case 中有异步任务,都会修改为同步执行。
require 'sidekiq/testing'
Sidekiq::Testing.inline!
在 test 文件的头部添加这段代码后,若 test case 中有异步任务,都会跳过。
require 'sidekiq/testing'
Sidekiq::Testing.disable!
可以直接创建一个 worker 对象,然后执行。
work = HardWorker.new
work.perform(1, 2)