如何将rspec-puppet测试从1.x转换为2.0.1?

时间:2015-04-18 12:54:28

标签: rspec puppet

rspec-puppet 1.0.1切换到rspec-puppet 2.0.1时,数百个测试开始失败。其中大多数都包含错误undefined method resource for #<Proc

例如: 1) haproxy on supported platforms for linux operating systems on Debian family operatingsystems Base concat fragment contents should contain global and defaults sections Failure/Error: let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-haproxy-base', 'content').split("\n") } NoMethodError: undefined method `resource' for #<Proc:0x0000000308a590> # /home/travis/.rvm/gems/ruby-2.1.5/gems/puppetlabs_spec_helper-0.10.2/lib/puppetlabs_spec_helper/module_spec_helper.rb:6:in `param_value' # ./spec/classes/haproxy_spec.rb:89:in `block (7 levels) in <top (required)>' # ./spec/classes/haproxy_spec.rb:92:in `block (7 levels) in <top (required)>'

如何修复这些测试?

1 个答案:

答案 0 :(得分:1)

旧测试引用变量subject,但在rspec-puppet 2.0.1中,此更改为catalogue。这种不兼容的变化导致主要版本颠簸。请参阅this commit.

中的评论

然而,升级旧测试的正确方法并不明显。我们无法简单地进行全局搜索和替换,将subject更改为catalogue

对我有用的策略是找到问题的第一个实例并修复它。这将消除该错误以及随后的许多错误。一遍又一遍地重复这个过程最终解决了所有问题。

在上面的示例中,错误中提到的第一个文件是spec/classes/haproxy_spec.rb:89(第89行)。这显示为:

let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-haproxy-base', 'content').split("\n") }

改变&#34;主题&#34;到&#34;目录&#34;像这样:

let(:contents) { param_value(catalogue, 'concat::fragment', 'haproxy-haproxy-base', 'content').split("\n") }

此更改消除了接下来的7个错误。

您还会看到以下几行:

verify_contents(subject, '/etc/default/haproxy', ['ENABLED=1'])

expect { subject }.to raise_error Puppet::Error, /Invalid IP address/

其中每一个都修复了有问题的错误以及该背景下的所有其他错误。

优化:您不必在每次更改后重新运行规范。您会注意到每次更改都会修复一系列错误。在上面的例子中,7个错误的序列都表示spec/classes/haproxy_spec.rb:89。寻找提到其他行号或完全不同的文件的第一个错误,通常会发现另一行提到subject。在这种情况下,下一个示例是spec/classes/haproxy_spec.rb:157

可能存在其他不兼容性,但这解决了我的主要问题。