Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何测试是否触发了apt_更新调用?_Ruby_Chef Infra_Apt_Chefspec - Fatal编程技术网

Ruby 如何测试是否触发了apt_更新调用?

Ruby 如何测试是否触发了apt_更新调用?,ruby,chef-infra,apt,chefspec,Ruby,Chef Infra,Apt,Chefspec,在构建一些配方时,我们发现,如果系统已经处于良好状态,但更新仍在运行,那么触发apt_更新作为流程的一部分可以大大降低速度 为了解决这个问题,我们使用action:nothing进行了apt_update调用,然后设置了实际需要更新通知的内容:before或:立即(比如在安装包之前或添加apt存储库之后,尽管添加时可以通过标志控制存储库案例) 我们希望测试apt_update调用是否仅在必要时触发,并且不会作为converge的一部分运行,否则不会安装软件包 apt_update 'update

在构建一些配方时,我们发现,如果系统已经处于良好状态,但更新仍在运行,那么触发apt_更新作为流程的一部分可以大大降低速度

为了解决这个问题,我们使用action:nothing进行了apt_update调用,然后设置了实际需要更新通知的内容:before或:立即(比如在安装包之前或添加apt存储库之后,尽管添加时可以通过标志控制存储库案例)

我们希望测试apt_update调用是否仅在必要时触发,并且不会作为converge的一部分运行,否则不会安装软件包

apt_update 'update' do
  action :nothing
end

apt_repository 'git-core' do
  uri          'ppa:git-core/ppa'
  distribution node['lsb']['codename']
  notifies :update, 'apt_update[update]', :immediately
end

我花了很长时间才找到真正在测试apt_update的代码,甚至花了更长的时间来理解它,然后,当我想测试它总是在正确的时间运行apt_update时,它会在编译阶段而不是收敛阶段的早期被触发

it 'triggered apt update' do
  ppa_call = chef_run.apt_repository('git-core')
  expect(ppa_call).to notify('apt_update[update]').to(:update).immediately
end

it 'default apt update' do
  expect(chef_run).to update_apt_update('update')
end

it 'install git' do
  expect(chef_run).to install_apt_package('git')
end

我不记得在哪里找到了条件触发语法,但在再次查找常规apt_update测试后,我终于在chefspec示例中找到了它

运行kitchen converge,检查每次运行apt_存储库时是否都会执行它,或者在存储库已经存在时跳过它。我不确定这个资源是否是幂等的。如果它不是幂等的,它肯定会在每次运行时通知update。我建议为apt_存储库添加一个guard子句,以便在存储库已经存在时跳过它


单元测试将无法确认只有在添加新存储库时才会调用更新。

为此编写单元测试太过分了。