Назад | Перейти на главную страницу

Сопоставитель ChefSpec для выполнения, когда действие: ничего?

Написание тестов для полусложной настройки. Мне нужно перезагрузить 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')