繁体   English   中英

如何在Chefspec中初始化需要在配方中使用的变量

[英]How to initialize variables in chefspec which is needed to be used in recipe

我在下面有配方模板资源块:

 os_ver = node['platform_version'].to_f
 REPO_TEMPLATE = ''
 if (os_ver >= 6) && (os_ver < 7)
   REPO_TEMPLATE = 'epel.repo.rhel6.erb'
 elsif (os_ver >= 7) && (os_ver < 8)
   REPO_TEMPLATE = 'epel.repo.rhel7.erb'
 end

 template EPEL_REPO_FILE do
   source REPO_TEMPLATE
   owner 'root'
   group 'root'
   mode '0644'
   action :create
 end

我做了这样的单元测试chefspec:

describe 'cos::upgrade_rpms' do
  let(:chef_run) do
    ChefSpec::SoloRunner.new do |node|
      node.set['platform_version'] = '7.0'
      REPO_TEMPLATE = 'epel.repo.rhel7.erb'
    end.converge(described_recipe)
  end
  it 'creates a epel repo' do
    expect(chef_run).to create_template('/etc/yum.repos.d/epel.repo').with(
      source: 'epel.repo.rhel7.erb'
      owner: 'root',
      group: 'root',
      mode: '0644'
    )
end

单元测试将失败,显示:source是不是source: 'epel.repo.rhel7.erb' 似乎在测试中设置的REPO_TEMPLATE无效。 有人可以说出如何在单元测试中模拟值吗?

platform_version是一个自动属性,通常由fauxhai使用您在运行程序或全局Rspec配置中提供的os和版本进行填充(如下所示(摘自ChefSpec的自述文件并适合您的用例)):

RSpec.configure do |config|
  # Specify the operating platform to mock Ohai data from (default: nil)
  config.platform = 'redhat'

  # Specify the operating version to mock Ohai data from (default: nil)
  config.version = '7.0'
end

引用ChefSpec文档提供的有关在运行时修改自动属性的信息:

describe 'example::default' do
  let(:chef_run) do
    ChefSpec::SoloRunner.new do |node|
      node.automatic['memory']['total'] = '512kB'
    end.converge(described_recipe)
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM