3

这可能是模拟资源的简单问题,但是......

class myclass (
  String stringParam,
  Integer intParam,
  File fileParam
) {
 # do some things
 $path = fileParam['title']
 $mode = fileParam['mode']
 # do some more things
 }

现在我想为这个类写一个 rspec-puppet 测试。如何创建或模拟文件资源并将其放入 rspec-puppet 使用的目录中,以便我可以引用它?

这个这个的答案让我走到了那里,但我尝试过的一切都导致 myClass 抱怨它被传递的是字符串而不是文件引用。

...
let(:params) {{
  :stringParam => 'Here is my string',
  :intParam    => 238,
  :fileParam   => *??????,*
}}
4

1 回答 1

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 提交功能请求。

于 2017-03-04T13:53:16.577 回答