当在Geppetto中创建新的木偶模块时,也会创建清单,规范和测试文件夹。驻留在manifests文件夹中的init.pp如下所示:
define X (
$version = "",
$installer = "",
$installer_extension = ""
) {
file { "${name}_installer_copied_to_temp_directory":
path => "c:/temp/${name}-${version}.${installer_extension}",
source => "puppet:///files/${installer}.${installer_extension}",
before => Exec["${name}_installed"],
require => File["c:/temp"];
}
}
驻留在tests文件夹中的关联init.pp如下所示:
include X
如果puppet中的TDD有意义,如何为define X
片段创建测试以及如何在Geppetto中运行测试?
答案 0 :(得分:2)
确实有意义!
我首先看rspec-puppet
。它为您提供了自定义RSpec匹配器,可帮助您测试Puppet资源。
我不确定Geppetto创建的样板包含什么,但是在模块的根目录下运行rspec-puppet-init
会为你设置它。
在您的情况下,您应该首先创建一个specs/defines/X_spec.rb
文件并创建一些测试用例,其中包含define
输入的变体,用于测试所包含的File
资源正确的属性。
您可以查看rspec-puppet
的{{3}},了解有关如何编写测试用例的示例。
请注意,您不应该测试是否在磁盘中创建了文件。这是Puppet的域(不是你的模块),已经在Puppet的代码库中测试过。
答案 1 :(得分:0)
为了澄清更高层次,使用rspec-puppet在Puppet中进行TDD的方式可能与您在其他语言中使用的TDD略有不同。 Rspec-puppet仅测试生成的目录;它不会以您可能首先想到的方式进行“冒烟测试”,但它对单元测试非常有效。
例如它不是什么,比如在一般的包文件服务范例中,有一些特定于环境的原因,包可能没有安装 - 比如,它与另一个RPM冲突。 Rspec-puppet无法测试或捕获这样的东西,因为它只检查生成的目录;而不是该目录在实际系统上的实际应用。
通常,开始测试的一个好方法是识别(a)分支逻辑和(b)模块中不同的数据/值。作为第一步,针对所有逻辑分支编写测试,并测试代码中可能存在的变量的有效,无效和异常值。
在上面的例子中,确实没有太多的逻辑,但你可以测试当$ name或$ version的奇数值被放入时会发生什么;你希望你的木偶代码优雅地失败,因为未处理的木偶错误通常不是最具沟通性和最明显的错误。
绝对最低......
it { should compile }
(安装后让它干净利落可能有点熊,这是真的。我也使用puppetlabs_spec_helper。)