加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – ChefSpec不应该测试包含的食谱

发布时间:2020-12-17 03:16:59 所属栏目:百科 来源:网络整理
导读:我已经建立了一个用于安装Jenkins CI的食谱.它使用yum cookbook中的密钥和存储库资源,因此我最终得到以下配方: yum_key "RPM-GPG-KEY-jenkins" do url "http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key" action :addendyum_repository "jenkins" do d
我已经建立了一个用于安装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.

资料来源:

>我写了……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读