如何在参数需要资源引用时 rspec 测试 Puppet class
How to rspec test a Puppet class when a parameter needs a resource reference
这可能是模拟资源的简单问题,但是...
class myclass (
String stringParam,
Integer intParam,
File fileParam
) {
# do some things
$path = fileParam['title']
$mode = fileParam['mode']
# do some more things
}
现在我想为这个 class 编写一个 rspec-puppet 测试。我如何创建或模拟文件资源并将其放入 rspec-puppet 使用的目录中,以便我可以引用它?
this and this 的答案让我半途而废,但我尝试的一切都导致 myClass 抱怨它传递的是字符串而不是文件引用。
...
let(:params) {{
:stringParam => 'Here is my string',
:intParam => 238,
:fileParam => *??????,*
}}
rspec-puppet 对此并没有太多支持,因为 class 测试参数列表是从 :params
假设仅字符串(或嵌套 hashes/arrays 等包含字符串)或几乎字面上使用的几个允许的符号值,: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 将调用 ResourceReference
对象上的 inspect
方法,returns 您传入的字符串。这应该放在清单中不变。
(这最初用作 undef
的解决方法,现在可以作为 :undef
传递。)
顺便说一句,您可以设置 let(:pre_condition) { "..." }
在生成的 class { ... }
之前将文字内容添加到测试清单中,但我认为这里没有办法使用它。
我强烈建议针对 rspec-puppet 提交功能请求。
这可能是模拟资源的简单问题,但是...
class myclass (
String stringParam,
Integer intParam,
File fileParam
) {
# do some things
$path = fileParam['title']
$mode = fileParam['mode']
# do some more things
}
现在我想为这个 class 编写一个 rspec-puppet 测试。我如何创建或模拟文件资源并将其放入 rspec-puppet 使用的目录中,以便我可以引用它?
this and this 的答案让我半途而废,但我尝试的一切都导致 myClass 抱怨它传递的是字符串而不是文件引用。
...
let(:params) {{
:stringParam => 'Here is my string',
:intParam => 238,
:fileParam => *??????,*
}}
rspec-puppet 对此并没有太多支持,因为 class 测试参数列表是从 :params
假设仅字符串(或嵌套 hashes/arrays 等包含字符串)或几乎字面上使用的几个允许的符号值,: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 将调用 ResourceReference
对象上的 inspect
方法,returns 您传入的字符串。这应该放在清单中不变。
(这最初用作 undef
的解决方法,现在可以作为 :undef
传递。)
顺便说一句,您可以设置 let(:pre_condition) { "..." }
在生成的 class { ... }
之前将文字内容添加到测试清单中,但我认为这里没有办法使用它。
我强烈建议针对 rspec-puppet 提交功能请求。