Написание тестов для полусложной настройки. Мне нужно перезагрузить systemd
после удаления некоторого сценария инициализации, установленного пакетом.
pager.rb
:
execute 'systemctl daemon-reload' do
action :nothing
end
...
file '/etc/init.d/pdagent' do
notifies :run, 'execute[systemctl daemon-reload]', :immediately
action :delete
end
Все это работает, но у меня проблемы с написанием набора тестов ChefSpec для выполнить блок. Сет Варго Примеры показать сопоставление для run_execute, но использовать его для action :nothing
не удается:
spec.rb
:
it do
expect(chef_run).to run_execute('systemctl daemon-reload')
end
приводит к:
Сбой / ошибка: ожидайте (chef_run) .to run_execute ('systemctl daemon-reload') ожидаемые действия «выполнить [systemctl daemon-reload]» [], которые включают: run # ./spec/pagerduty_spec.rb:18:in `block (2 уровня) в '
Оказывается, есть довольно общий ничего не делать совпадение:
ожидать (выполнить). to do_nothing
В современном Chef сопоставители принимают форму action_resource
. Итак, когда вы пишете expect(chef_run).to run_execute('my command')
, вы указываете, что ресурс execute 'my command'
сходится с действием :run
. Вместо этого вы хотите сопоставить действие :nothing
, так что вы должны написать:
expect(chef_run).to nothing_execute('my command')