Chef
當操作為:無時執行的 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 測試套件時遇到了麻煩。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')