[英]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.