Escrevendo alguns testes para uma configuração semi-complicada. Preciso recarregar systemd
depois de remover algum script init instalado por um pacote.
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
Tudo isso funciona, mas estou tendo problemas para escrever um conjunto de testes ChefSpec para o bloco de execução . Os exemplos de Seth Vargo mostram um matcher para run_execute, mas usá-lo para action :nothing
falhas:
spec.rb
:
it do
expect(chef_run).to run_execute('systemctl daemon-reload')
end
resulta em:
Falha/erro: expect(chef_run).to run_execute('systemctl daemon-reload') ações "execute[systemctl daemon-reload]" esperadas [] para incluir :run # ./spec/pagerduty_spec.rb:18:in `block (2 níveis) em '
Acontece que há um matcher do_nothing bastante genérico:
No Chef moderno, os matchers assumem a forma de
action_resource
. Então, quando você escreveexpect(chef_run).to run_execute('my command')
, o que você está especificando é que o recursoexecute 'my command'
converge com a ação:run
. Em vez disso, você deseja corresponder action:nothing
, então você escreveria:expect(chef_run).to nothing_execute('my command')