2016-12-10 39 views
0

我Sidekiq工人如下面的例子:禁用模式下的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测试模式为Disable检查:

  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之前。

回答

1

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

+0

谢谢。假设假模式可以测试1,内联模式可以测试4.作为新手,我不知道禁用模式如何测试2,以及如何执行手动测试3。 – Asarluhi