为半复杂的设置编写一些测试。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 级)在 '
原来有一个相当通用的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')