2016-12-10 68 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