【问题标题】:How does Sidekiq testing in disable mode actually work?Sidekiq 在禁用模式下的测试实际上是如何工作的?
【发布时间】: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 测试来检查:

  1. 作业已入队
  2. Sidekiq 与 Redis 通信(作业被推送到 Redis)
  3. 从 Redis 检索并执行作业
  4. 作业提供预期结果

我可以创建什么样的测试来检查以上所有四点?
考虑下面的示例测试:

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。

【问题讨论】:

    标签: sidekiq minitest


    【解决方案1】:

    您的测试应该测试您的代码,而不是 Sidekiq 的。执行手动测试以验证所有内容均已集成。禁用模式可以测试 1 和 2,您的测试可以直接验证 4。 3 是手动完成的。

    【讨论】:

    • 谢谢。我想假模式可以测试 1,内联模式可以测试 4。作为一个新手,我不知道禁用模式如何测试 2,以及如何对 3 执行手动测试。
    猜你喜欢
    • 2017-12-22
    • 2021-10-31
    • 2016-10-05
    • 2021-01-21
    • 2011-09-27
    • 2021-12-16
    • 2013-03-14
    • 2021-03-23
    • 2011-02-11
    相关资源
    最近更新 更多