Rspec Puppet:定义类型迭代

时间:2015-12-11 20:29:45

标签: puppet rspec-puppet

  • 使用Puppet 3
  • 使用rspec-puppet进行测试
  • 使用定义类型
  • 迭代一系列哈希
  • 获取错误,告诉我我的参数(默认为$ title的值)无法以我的方式访问,因为它不是数组或哈希

我在puppet模块中使用旧式迭代,创建一个定义的类型来迭代一个哈希数组。我正在尝试在rspec-puppet中为此定义编写测试,尝试使用:title将哈希值分配给let()。然后应该将$title设置为我的名为$daemon的变量,但我的测试不断抛出错误,指出$daemon不是散列或数组。

以下是我创建定义类型的方法:

define my_module::daemon_install ($daemon = $title) {

  package {"${daemon['package_name']}":
    ensure => "${daemon['package_version']}",
  }

  file {"${some_fact}/${daemon['binary']}.conf":
    ensure => file,
    content => "blah"
    notify => Service["${daemon['name']}"],
  }

  service {"${daemon['name']}":
    ensure => running,
    enable => true,
  }
}

以下是我试图设置标题的方式:

describe 'my_module::daemon_install' do

  context 'with foo' do

    let(:title) {
      {
        "name" => "foo",
        "package_name" => "bar",
        "package_version" => "1.0.1",
        "binary" => "food",
      }
    }

    # ...

  end
end

这是错误:

daemon is not a hash or array when accessing it with package_version

我实际上已经习惯于使用定义的类型进行迭代,而且在rspec-puppet上是非常新的,所以我不确定我是否遗漏了一些明显的东西。

但为什么只抱怨package_version而不是package_name?更重要的是:为什么它不是哈希,当(我相信)我在spec文件中正确设置它时。

我应该提一下,使用这个定义类型的类的另一个测试成功完成。因此,如果我猜测的话,它似乎与我在直接测试定义时如何设置标题有关。

1 个答案:

答案 0 :(得分:1)

Rspec始终将title转换为String

$name而不是define()中使用$title,并将以下内容添加到测试中:

let :title do
  { ... }
end

let :params do
  { :name => title }
end

请注意$name应该等于$title