这可能是模拟资源的简单问题,但是......
dontTypecheck
现在我想为这个类写一个rspec-puppet测试。如何创建或模拟文件资源并将其放入rspec-puppet使用的目录中,以便我可以引用它?
this和this的答案让我在那里,但我尝试的一切都导致myClass抱怨它传递的是字符串而不是文件引用。
class myclass (
String stringParam,
Integer intParam,
File fileParam
) {
# do some things
$path = fileParam['title']
$mode = fileParam['mode']
# do some more things
}
答案 0 :(得分:2)
在rspec-puppet中没有真正支持这一点,因为类测试参数列表是从:params
生成的,假设只有字符串(或嵌套的哈希/数组等包含字符串)或者几个字符使用的允许符号值:undef
和:default
。它没有传递资源引用的方法。
存在一种解决方法,通过传递响应inspect
方法的对象,您可以将文字内容放入清单中。例如,在spec_helper.rb
:
class ResourceReference
def initialize(ref)
@ref = ref
end
def inspect
@ref
end
end
然后在你的规范中:
let(:params) {{
:stringParam => 'Here is my string',
:intParam => 238,
:fileParam => ResourceReference.new("File[/etc/foo]"),
}}
rspec-puppet将调用inspect
对象上的ResourceReference
方法,该方法返回您传入的字符串。这应该在清单中保持不变。
(这最初用作undef
的解决方法,现在可以作为:undef
传递。)
另外,您可以设置let(:pre_condition) { "..." }
在生成的class { ... }
之前将文字内容添加到测试清单中,但我不认为这里有使用方法
我强烈建议针对rspec-puppet提交功能请求。