当参数需要资源引用时,如何rspec测试Puppet类

时间:2017-03-04 04:37:43

标签: ruby unit-testing rspec puppet rspec-puppet

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

dontTypecheck

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

thisthis的答案让我在那里,但我尝试的一切都导致myClass抱怨它传递的是字符串而不是文件引用。

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

1 个答案:

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