【发布时间】:2016-12-10 14:37:43
【问题描述】:
我的 Sidekiq 工作人员如下例所示:
Class BooksWorker
include Sidekiq::Worker
def perform
books = Book.where(collected: true)
books.each do |book|
book.update_attribute(:status, "read")
book.toggle!(:collected)
end
end
end
我想在禁用模式下使用 Sidekiq 测试来检查:
- 作业已入队
- Sidekiq 与 Redis 通信(作业被推送到 Redis)
- 从 Redis 检索并执行作业
- 作业提供预期结果
我可以创建什么样的测试来检查以上所有四点?
考虑下面的示例测试:
require 'test_helper'
require 'sidekiq/testing'
class BooksWorkerDisableTest < Minitest::Test
def setup
configure = -> (config) do
config.redis = { url: 'redis://localhost:6379/15' }
end
Sidekiq.configure_client(&configure)
Sidekiq.configure_server(&configure)
Sidekiq::Testing.disable!
@books = Book.where(collected: true)
end
test "collected books should be marked as read before archived" do
BooksWorker.perform_async
@books.each do |book|
assert book.status == "read"
assert book.collected == false
end
end
end
如果测试期间 Sidekiq 将作业入队,推送到 Redis,从 Redis 中检索并执行,假设仅在执行作业后关闭测试,需要多长时间才能完成测试?
上面的测试只检查第四点:我如何测试其他点?我想这只是隐含的,如果执行了作业,那么它们之前已经排队并推送到了 Redis。
【问题讨论】: