Chef

當操作為:無時執行的 ChefSpec 匹配器?

  • January 22, 2019

為半複雜的設置編寫一些測試。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 測試套件時遇到了麻煩。Seth Vargo 的範例顯示了 run_execute 的匹配器,但使用它action :nothing失敗:

spec.rb:

it do
 expect(chef_run).to run_execute('systemctl daemon-reload')
end

結果是:

失敗/錯誤:expect(chef_run).to run_execute(‘systemctl daemon-reload’) 預期“執行

$$ systemctl daemon-reload $$“行動$$ $$包括 :run # ./spec/pagerduty_spec.rb:18:in `block (2 levels) in '

原來有一個相當通用的do_nothing匹配器:

期望(執行).to do_nothing

在現代 Chef 中,匹配器採用action_resource. 因此,當您編寫 時expect(chef_run).to run_execute('my command'),您指定的是資源execute 'my command'與操作會聚:run。相反,你想匹配 action :nothing,所以你會寫:

expect(chef_run).to nothing_execute('my command')

引用自:https://serverfault.com/questions/812853