如何在 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
单元测试将失败,表示:源是 '' 而不是源:'epel.repo.rhel7.erb'。
test中设置的REPO_TEMPLATE好像没有效果。有人能告诉我如何模拟单元测试中的值吗?
platform_version
是一个自动属性,通常由 fauxhai 填写 os 和您在 runner 或全局 Rspec 配置中提供的版本,如下所示(引用自 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 Documentation,用于在运行时修改自动属性:
describe 'example::default' do
let(:chef_run) do
ChefSpec::SoloRunner.new do |node|
node.automatic['memory']['total'] = '512kB'
end.converge(described_recipe)
end
end
我有下面的食谱模板资源块:
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
单元测试将失败,表示:源是 '' 而不是源:'epel.repo.rhel7.erb'。 test中设置的REPO_TEMPLATE好像没有效果。有人能告诉我如何模拟单元测试中的值吗?
platform_version
是一个自动属性,通常由 fauxhai 填写 os 和您在 runner 或全局 Rspec 配置中提供的版本,如下所示(引用自 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 Documentation,用于在运行时修改自动属性:
describe 'example::default' do
let(:chef_run) do
ChefSpec::SoloRunner.new do |node|
node.automatic['memory']['total'] = '512kB'
end.converge(described_recipe)
end
end