如何检查木偶单元测试中局部变量的值?

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 级别,这无关紧要。