如何使用rspec在puppet中模拟puppet验证_cmd?

如何使用rspec在puppet中模拟puppet验证_cmd?,puppet,rspec-puppet,Puppet,Rspec Puppet,我有一个木偶食谱rspec样本测试,如下所示 它{ _应包含_文件'/etc/resolv.conf' 具有 '确保'=>'文件', '所有者'=>'根', '组'=>'根', “模式”=>“0444”, 'validate_cmd'=>'/var/tmp/checkdns_nameservers.sh', .with_contentresolvconf_contents .通知“服务[sshd]” .通知“服务[nscd]” } 问题在于,这只是检查清单中是否存在validate_cmd 我必

我有一个木偶食谱rspec样本测试,如下所示

它{ _应包含_文件'/etc/resolv.conf' 具有 '确保'=>'文件', '所有者'=>'根', '组'=>'根', “模式”=>“0444”, 'validate_cmd'=>'/var/tmp/checkdns_nameservers.sh', .with_contentresolvconf_contents .通知“服务[sshd]” .通知“服务[nscd]” } 问题在于,这只是检查清单中是否存在validate_cmd

我必须模拟validate_cmd函数并返回true/false,并在此基础上检查新创建的文件的内容。 如何使用rspec模块模拟validate_cmd命令?
任何帮助都将不胜感激

简而言之,这是不可能的,您需要使用烧杯、测试厨房等工具

要获得更详细的答案,我将向您介绍Rspec傀儡:

很多人对这些测试的目的感到困惑,因为他们无法在实时系统上测试清单的结果。这不是rspec傀儡的重点。Rspec puppet测试用于测试puppet在将清单编译到puppet资源目录中时的行为

关键是Rspec puppet从不应用它编译的目录;它只检查已编译的目录,并允许您对其中的内容做出断言。但是,为了观察针对validate_cmd所做操作的不同而产生的行为,您确实需要在实际系统上应用目录

当然,在烧杯或测试厨房中设置系统以使脚本返回两个不同的值并不是一件小事。此外,你真正要测试的是什么。你不是在测试木偶本身是否做了它承诺做的事情吗?如果是这样,你真的不应该试着去测试它


或者,这是你自己写的剧本吗?如果是这样,考虑使用BASH单元测试框架,或者像这样。相反,请证明您的shell脚本的行为与您期望它响应操作系统的方式相同

或者换句话说:单元测试!=验收测试。此外,烧杯等框架对于这一测试来说可能是杀伤力过大。封隔器就足够了,而且要轻得多。