我有一个木偶食谱RSPEC样本测试,如下
it {
is_expected.to contain_file('/etc/resolv.conf')
.with(
'ensure' => 'file',
'owner' => 'root',
'group' => 'root',
'mode' => '0444',
'validate_cmd' => '/var/tmp/checkdns_nameservers.sh',
)
.with_content(resolvconf_contents)
.that_notifies('Service[sshd]')
.that_notifies('Service[nscd]')
}
问题在于,这只是检查清单中Validate_CMD的存在。
我必须模拟validate_cmd函数并返回true/false,并根据我必须检查新创建的文件内容。如何使用RSPEC模块模拟Validate_CMD命令?任何帮助将不胜感激!
简短的答案是,这是不可能的,您需要使用烧杯,测试厨房等工具等。
要获得更长的答案,我将您引导到RSPEC-PUPPET教程:
有很多人对这些测试的目的感到困惑,因为他们无法测试现场系统上清单的结果。那不是RSPEC-PUPPET的重点。RSPEC-PUPPET测试在木偶将您的表现汇编成木偶资源的目录时,将在那里测试它的行为。
关键点是rspec-puppet从不使用它编译的目录;它仅检查编译后的目录,并允许您对那里的内容做出断言。但是,要响应validate_cmd
的差异来观察行为,您确实需要将目录应用于真实系统。
当然,在烧杯或测试厨房中设置系统并不是很微不足道的,这样您的脚本也会返回两个不同的值。此外,您真正要测试什么。您不是在测试木偶本身是否会做什么?如果是这样,您真的不应该尝试测试。
或者,这是您写过自己的脚本吗?如果是这样,请考虑使用BASH单元测试框架,例如Shunit2或BATS。相反,证明您的Shell脚本以您对OS的响应方式行事。