我很喜歡Trailblazer的所有面向對象的美麗!如何測試/模擬與外部寶石交互的開拓者操作?
我有一個操作可以與一個gem(叫做cpanel_deployer
)交互,在網絡上做一些外部事情。 (它增加了一個附加域到的cPanel。)
class Website::Deploy < Trailblazer::Operation
attr_reader :website, :cpanel
def process(params)
real_cpanel_add_domain
website.cpanel = cpanel
website.save
end
private
def setup!(params)
@cpanel = Cpanel.find(params[:cpanel_id])
@website = website.find(params[:website_id])
end
def real_cpanel_add_domain
cp_domain = CpanelDeployer::Domain.new(website.domain)
cp_panel = CpanelDeployer::Panel.new(cpanel.host, cpanel.username, cpanel.password)
res = cp_panel.add_domain(cp_domain)
raise StandardError unless res
end
end
的cpanel_deloyer
寶石已經測試過,所以我並不需要重新測試它的功能在這裏。但爲了測試操作,我想確保CpanelDeployer::Panel#add_domain
以正確的參數被調用。所以我想我應該嘲笑CpanelDeployer::Panel
。
我認爲嘗試使用any_instance_of
是不好的做法。根據thinkbot,它通常被認爲是代碼異味...他們推薦使用依賴注入。在開拓者操作中是否有使用依賴注入的好方法?對於這種情況還有另一種最佳做法嗎?
'real_cpanel_add_domain'是與外界交互的東西。 'cpanel.add_domain()'調用是將網站添加到外部網站中的真實cPanel。有沒有更好的方式來做這個外界的互動? 這是有趣的想法注入參數....但我不認爲我想要在應用程序中實際使用它... – Josh