当从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)>'
我该如何修正这些测试?
发布于 2015-04-18 12:54:28
旧的测试引用变量subject,但在rspec-puppet 2.0.1中,这被更改为catalogue。这种不兼容的更改导致了主要版本的增加。参见这个承诺。中的注释
然而,升级旧测试的正确方法并不明显。不能简单地进行全局搜索,并将subject更改为catalogue。
一个对我有用的策略是找到问题的第一个实例并修复它。这将消除该错误以及随后发生的许多错误。反复重复这个过程,最终解决了所有的问题。
在上面的示例中,错误中提到的第一个文件是spec/classes/haproxy_spec.rb:89 (第89行)。这似乎是:
`let(:contents) { param_value(subject, 'concat::fragment', 'haproxy-haproxy-base', 'content').split("\n") }` 将“主题”改为“目录”如下:
`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
可能还有其他不相容之处,但这解决了我的主要问题。
https://stackoverflow.com/questions/29717638
复制相似问题