scribble

吕小荣

Blog Friends RSS About

Sidekiq 测试怎么写

7 January, 2014

官方文档提供了三种测试模式


require 'sidekiq/testing'
Sidekiq::Testing.fake!
Sidekiq::Testing.inline!
Sidekiq::Testing.disable!

Sidekiq::Testing.fake!(不用redis)

在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

Sidekiq::Testing.inline!(同步执行)

在test文件的头部添加这段代码后,若test case中有异步任务,都会修改为同步执行。


require 'sidekiq/testing'
Sidekiq::Testing.inline!

Sidekiq::Testing.disable!(禁用所有异步任务)

在test文件的头部添加这段代码后,若test case中有异步任务,都会跳过。


require 'sidekiq/testing'
Sidekiq::Testing.disable!

直接测试worker

可以直接创建一个worker对象,然后执行。


work = HardWorker.new
work.perform(1, 2)

Reference

  1. sidekiq Testing