为一个半复杂的设置编写一些测试。我需要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') 预期“execute[systemctl daemon-reload]”操作[] 包括:run # ./spec/pagerduty_spec.rb:18:in `block (2 levels) in '
答案1
事实证明,这是一个相当普通的没做什么匹配器:
期望(执行).不做任何事
答案2
在现代 Chef 中,匹配器采用 的形式action_resource
。因此,当您编写 时expect(chef_run).to run_execute('my command')
,您指定的是资源execute 'my command'
与操作 相聚合:run
。相反,您希望匹配操作:nothing
,因此您可以编写:
expect(chef_run).to nothing_execute('my command')