2015-04-02 100 views
0

首先,我使用的是Interactor Gem。 (你應該看看,如果你有沒有很酷LIB)如何使用Minitest測試Interactor Organizer

比方說,我有一個交互器::主辦單位如下:

class InitiateImport 
    include Interactor::Organizer 

    organize CreateImport, QueueImport 
end 

而且我也有兩個交互件爲如下:

class CreateImport 
    include Interactor 

    def call 
    import = Import.create() 
    if import 
     context.import = import 
    else 
     context.fail!(message: 'import failed!') 
    end 
    end 
end 

class QueueImport 
    include Interactor 

    def call 
    unless QueueHandler.perform_later(context.import.id) 
     context.fail!(message: 'Queue broke!') 
    end 
    end 
end 

大問題 - 如何 - 使用MINITEST - 測試organize正在呼籲InitiateImport與參數[CreateImport, QueueImport]

assert_send會讓我驗證organize被調用,但它不會讓我確認我通過什麼參數它。事情是這樣的:

class InitiateImportTest < Minitest::Test 
    def test_organize_called 
    InitiateImport.new(file: file) 

    assert_send([InitiateImport, :organize, [CreateImport, QueueImport]]) 
    end 
end 

我發現this問題/從近3年前的答案,但它並沒有爲我提供太多的清晰度。也許它在那裏,我只是想念一些東西?

我也意識到,我可以只有call組織者與有效的參數數據,以便它通過,我驗證從那裏的輸出,但是我已經有這兩個測試類,我基本上只是行使相同的功能兩次。如果可能,我真的很想驗證方法調用和參數。

任何幫助或建議將不勝感激。

+0

嘿!我認爲'間諜'可能會幫助你實現你正在尋找的東西,檢查我的其他[答案](http://stackoverflow.com/questions/28813062/idiomatically-mock-openuri-open-uri-with-minitest/28878374 #28878374)。希望有所幫助! – 2015-04-02 12:54:53

+0

謝謝!我會研究並報告。 – jamesconant 2015-04-02 12:57:23

+0

是啊......這很長時間你應該關注的東西在第一個代碼清單中用數字'(2)'和'(3)'標記。 – 2015-04-02 13:00:10

回答

0

您不能測試參數,因爲參數正在測試中設置。測試必須測試應用程序代碼,而不是測試本身。

你應該測試主辦單位是否正在做它打算做的事情。

在你的情況,你都在排隊後臺作業,您可以使用Sidekiq測試,如果隊列正在改變,對於爲例:

InitiateImport.call(params: params) 

assert_equal 0, QueueHandler.jobs.size 
QueueHandler.perform_async(1, 2) 
assert_equal 1, QueueHandler.jobs.size