Я люблю всю объектно-ориентированную красоту Trailblazer!Как тестировать/изнашивать операции Trailblazer, которые взаимодействуют с внешними драгоценными камнями?
У меня есть операция, которая взаимодействует с драгоценным камнем (так называемый 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
. По мыслим, это обычно считается запахом кода ... Они рекомендуют использовать инъекцию зависимостей. Есть ли хороший способ использования инъекции зависимостей в операции трейлера? Есть ли другая передовая практика для такого рода ситуаций?
'real_cpanel_add_domain' - это то, что взаимодействует с внешним миром. Этот вызов 'cpanel.add_domain()' - это то, что добавляет веб-сайт в реальный cpanel на внешний веб-сайт. Есть ли лучший способ сделать это во внешнем мире? Это интересная идея для инъекций с параметрами .... Но я не думаю, что хочу использовать его так в приложении ... – Josh