当操作为:无时,ChefSpec 匹配器用于执行什么?

当操作为:无时,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') 预期“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')

相关内容