我在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文件中正确设置它时。
我应该提一下,使用这个定义类型的类的另一个测试成功完成。因此,如果我猜测的话,它似乎与我在直接测试定义时如何设置标题有关。
答案 0 :(得分:1)
Rspec始终将title
转换为String
。
在$name
而不是define()
中使用$title
,并将以下内容添加到测试中:
let :title do
{ ... }
end
let :params do
{ :name => title }
end
请注意$name
应该等于$title
。