簡體   English   中英

如何使用 Minitest 對私有方法進行單元測試

[英]How to unit test a private method using Minitest

我想測試一個私有方法,但我遇到了一個簡單地說你不這樣做的答案!

我怎樣才能重構這段代碼以便我可以測試它?

在我的controller里面有一個私有方法

 def move_employees
    return unless params[:store_id].present?
    store = scope.find(params[:store_id])
    store.employments << @store.employments
    store.save!
 end

此方法在 destroy 操作中調用,這樣當我想刪除有員工的商店時,我可以將他們移動到從下拉菜單中選擇的現有商店

def destroy
    @store = scope.find(params[:id])
    authorize([:manage, :settings, @store])
    if @store.destroy
        move_employees
...

我正在考慮將該方法移至 model,但我不確定這是否是最佳方法,而且,我也不知道我將如何測試它。

在這種情況下,最佳做法是什么?

謝謝你。

從哲學上講,您不應該這樣做,因為私有方法應該在公共代碼的上下文中進行測試。 例如,如果move_employees必須作為destroy的一部分調用,則測試結束 state,而不是到達那里的機制。 也就是說,斷言刪除后員工已正確移動。

實際上,您可以直接測試是否准備好send 這種更直接的測試方法對於特別復雜的實現可能很有用,但在這些情況下,您可能應該分開您的關注點,並擁有一些其他工具來促進該操作,這些工具確實具有公共接口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM