如何检查木偶单元测试中局部变量的值?
How to check the value of a local variable in puppet unit test?
我有以下(简化的)设置:
mymod/manifests/as/myressource.pp:
define mymod::as::myressource (
Integer $abc,
) {
notice('mymod::as::myressource start ...')
$maxheap3 = '3G'
notice("maxheap3 = ${maxheap3}")
}
mymod/manifests/init.pp:
class mymod(
Optional[String] $maxheap,
) {
notice("${title} wird installiert...")
mymod::as::myressource {'no.1':
abc => 35
}
mymod::as::myressource {'no.2':
abc => 70
}
}
mymod/spec/classes/sometest.rb:
describe 'mymod' do
on_supported_os.each do |os, os_facts|
context "on #{os}" do
let(:facts) { os_facts }
let(:params) { {
} }
it { is_expected.to compile }
it { is_expected.not_to contain_mymod__as__myressource('no.3') }
it { is_expected.to contain_mymod__as__myressource('no.1').with({
:abc => 35,
# :maxheap3 => '3G'
}) }
end
end
end
测试没有错误,但如果我取消注释 maxheap3 行,它会失败并告诉我:
“预期目录将包含 Mymod::As::Myressource[no.1],maxheap3 设置为“3G”,但它设置为 nil”
为什么我可以用这种方式检查参数的值,而不是局部变量?在我的测试中如何检查 $maxheap3 的值?
How comes it, that I can check the value of a parameter in this manner, but not a local variable?
单元测试 Rspec puppet 测试目录的内容。该目录包含class和资源参数,但不包含有关局部变量的信息。
What can I do to check the value of $maxheap3 in my test?
您不能测试局部变量,至少不能直接测试,您不应该这样做。它们是一个实现细节。但是,您可以测试它们对出现在目录中的 classes 和资源的影响。这可能采取以下形式:声明了多少或哪些给定类型的资源,声明了哪些 classes,class 和资源参数采用什么值,等等。
在您的示例中,mymod::as::myressource
实例中 $maxheap3
的值对目录根本没有影响,因此您无法通过 Rspec 测试对其进行测试。但那又怎样?它对目录没有影响意味着它不会影响 Puppet 如何配置目标节点,因此在 Rspec_puppet 级别,这无关紧要。
我有以下(简化的)设置:
mymod/manifests/as/myressource.pp:
define mymod::as::myressource (
Integer $abc,
) {
notice('mymod::as::myressource start ...')
$maxheap3 = '3G'
notice("maxheap3 = ${maxheap3}")
}
mymod/manifests/init.pp:
class mymod(
Optional[String] $maxheap,
) {
notice("${title} wird installiert...")
mymod::as::myressource {'no.1':
abc => 35
}
mymod::as::myressource {'no.2':
abc => 70
}
}
mymod/spec/classes/sometest.rb:
describe 'mymod' do
on_supported_os.each do |os, os_facts|
context "on #{os}" do
let(:facts) { os_facts }
let(:params) { {
} }
it { is_expected.to compile }
it { is_expected.not_to contain_mymod__as__myressource('no.3') }
it { is_expected.to contain_mymod__as__myressource('no.1').with({
:abc => 35,
# :maxheap3 => '3G'
}) }
end
end
end
测试没有错误,但如果我取消注释 maxheap3 行,它会失败并告诉我: “预期目录将包含 Mymod::As::Myressource[no.1],maxheap3 设置为“3G”,但它设置为 nil”
为什么我可以用这种方式检查参数的值,而不是局部变量?在我的测试中如何检查 $maxheap3 的值?
How comes it, that I can check the value of a parameter in this manner, but not a local variable?
单元测试 Rspec puppet 测试目录的内容。该目录包含class和资源参数,但不包含有关局部变量的信息。
What can I do to check the value of $maxheap3 in my test?
您不能测试局部变量,至少不能直接测试,您不应该这样做。它们是一个实现细节。但是,您可以测试它们对出现在目录中的 classes 和资源的影响。这可能采取以下形式:声明了多少或哪些给定类型的资源,声明了哪些 classes,class 和资源参数采用什么值,等等。
在您的示例中,mymod::as::myressource
实例中 $maxheap3
的值对目录根本没有影响,因此您无法通过 Rspec 测试对其进行测试。但那又怎样?它对目录没有影响意味着它不会影响 Puppet 如何配置目标节点,因此在 Rspec_puppet 级别,这无关紧要。