ruby – ChefSpec不应该测试包含的食谱
我已经建立了一个用于安装Jenkins CI的食谱.它使用yum cookbook中的密钥和存储库资源,因此我最终得到以下配方:
yum_key "RPM-GPG-KEY-jenkins" do url "http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key" action :add end yum_repository "jenkins" do description "Jenkins-CI 3rd party repository" url "http://pkg.jenkins-ci.org/redhat" key "RPM-GPG-KEY-jenkins" action :add end 当我将这个食谱包含在另一个食谱中: include_recipe 'sp_jenkins::default' 我用以下的ChefSpec测试来测试它 it 'includes the `sp_jenkins::default` recipe' do expect(chef_run).to include_recipe('sp_jenkins::install') end 我的ChefSpec测试失败,输出如下: NameError: Cannot find a resource for yum_key on chefspec version 0.6.1 (我不确定为什么它说版本0.6.1,宝石列表告诉我它使用的是3.0.2) sp_jenkins食谱确实依赖于yum cookbook(metadata.rb),并且运行正常,但是,我正在编写的食谱不依赖于yum cookbook,因此没有yum_key和yum_repository方法可用. 有没有办法阻止ChefSpec“降序”到包含的食谱/烹饪书中,只测试当前的食谱? 解决方法
Ohai! Julian是正确的 – ChefSpec实际上在本地计算机的内存中运行了
Chef Solo.它将提供者操作重写为noop,但会创建所有操作的注册表(包括执行通知时将采取的操作).
因此,就像您需要yum cookbook将此配方汇集到一个真实节点上一样,您需要在使用ChefSpec进行单元测试时将其汇总.完成此任务的最简单方法是使用Berkshelf或Librarian解析器.要使用Berkshelf resolver,在要求chefspec之后只需要’chefspec / berkshelf’: # spec_helper.rb require 'chefspec' require 'chefspec/berkshelf' 如果您的系统上安装了Berkshelf,它会将所有cookbook拉入临时目??录并为您运行ChefSpec. 您可能还想看看Strainer,其目的是解决类似的问题. 在一个有点不相关的说明中,我正在研究一个可能更适合您需求的large refactor to the Jenkins cookbook. 资料来源: >我写了…… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |