Rspec 无法从 puppet 中找到 require 包,我可以跳过定义类型中的 require 吗?
Rspec could not find require package from puppet, can I skip require in define type?
我正在尝试编写 rspec 测试木偶代码。在我的人偶中,我调用了一个不属于此 class 的定义类型。 (先前定义)木偶代码在分支测试中可以找到,但 rspec 无法通过“reuire”。
人偶:
$gluster_path = '/usr/libexec/zabbix-gluster'
$gluster_discovery_script = "${gluster_path}/gstatus_discovery.py"
$user_param_lines = [
"UserParameter=gluster_volume_info[*],${gluster_discovery_script} $1 $2\n",
"UserParameter=gluster_storage_info[*],${gluster_discovery_script} $1\n",
"UserParameter=gluster_volume_name.discovery,${gluster_discovery_script}\n",
]
...
zabbix::agent::userparam { 'glusterfs':
content => join($user_param_lines, ''),
}
Rspec:
...
it {
is_expected.to contain_zabbix__agent__userparam('cnvr-zabbix-gluster')
}
定义类型:
define zabbix::agent::userparam($content = undef, $source = undef) {
...
file { "/etc/zabbix/zabbix_agentd.d/userparameter_${title}.conf":
...
require => [
Package['zabbix-agent'],
File['zabbix_agentd_dir'],
],
content => $content,
source => $_source,
notify => Service['zabbix-agent'],
}
zabbix-agent已从其他模块安装。但是错误不断提示:
人偶::错误:
无法在节点
上的参数 'require' 中找到资源 'Package[zabbix-agent]'(文件:/home/edwu/puppet/modules/zabbix/manifests/agent/userparam.pp,行:17)
有什么方法可以让我在 rspec 中跳过此要求检查?
Is there a way I can skip this requirement checking in rspec?
RSpec测试报错是目录编译错误。它绝不特定于 RSpec。事实上,它指出 善意 zabbix::agent::userparam
中的弱点,以及在测试中 class 中可能存在的缺陷。这正是写RSpec测试的原因之一!
问题是zabbix::agent::userparam
不独立。它需要声明 Package['zabbix-agent']
,但它既不声明它自己也不声明 class。你的 class 被测继承了这个弱点,虽然你离问题的中心越远,你就越倾向于称它为错误,而不是简单的弱点。您的 class 也可以声明所需的其他 class,它可能应该这样做。
您不能让目录构建器让对不存在的资源的要求不加注释地通过,您也不应该这样做,因为这是您想要[=24]的事情之一=] 你的测试揭示给你。但是如果你想让你的 class 中的这个弱点持续存在,那么你可以使用 an RSpec pre-condition 让 RSpec 为你声明合适的 class ,所以要求是其实很满意
我正在尝试编写 rspec 测试木偶代码。在我的人偶中,我调用了一个不属于此 class 的定义类型。 (先前定义)木偶代码在分支测试中可以找到,但 rspec 无法通过“reuire”。 人偶:
$gluster_path = '/usr/libexec/zabbix-gluster'
$gluster_discovery_script = "${gluster_path}/gstatus_discovery.py"
$user_param_lines = [
"UserParameter=gluster_volume_info[*],${gluster_discovery_script} $1 $2\n",
"UserParameter=gluster_storage_info[*],${gluster_discovery_script} $1\n",
"UserParameter=gluster_volume_name.discovery,${gluster_discovery_script}\n",
]
...
zabbix::agent::userparam { 'glusterfs':
content => join($user_param_lines, ''),
}
Rspec:
...
it {
is_expected.to contain_zabbix__agent__userparam('cnvr-zabbix-gluster')
}
定义类型:
define zabbix::agent::userparam($content = undef, $source = undef) {
...
file { "/etc/zabbix/zabbix_agentd.d/userparameter_${title}.conf":
...
require => [
Package['zabbix-agent'],
File['zabbix_agentd_dir'],
],
content => $content,
source => $_source,
notify => Service['zabbix-agent'],
}
zabbix-agent已从其他模块安装。但是错误不断提示:
人偶::错误: 无法在节点
上的参数 'require' 中找到资源 'Package[zabbix-agent]'(文件:/home/edwu/puppet/modules/zabbix/manifests/agent/userparam.pp,行:17)有什么方法可以让我在 rspec 中跳过此要求检查?
Is there a way I can skip this requirement checking in rspec?
RSpec测试报错是目录编译错误。它绝不特定于 RSpec。事实上,它指出 善意 zabbix::agent::userparam
中的弱点,以及在测试中 class 中可能存在的缺陷。这正是写RSpec测试的原因之一!
问题是zabbix::agent::userparam
不独立。它需要声明 Package['zabbix-agent']
,但它既不声明它自己也不声明 class。你的 class 被测继承了这个弱点,虽然你离问题的中心越远,你就越倾向于称它为错误,而不是简单的弱点。您的 class 也可以声明所需的其他 class,它可能应该这样做。
您不能让目录构建器让对不存在的资源的要求不加注释地通过,您也不应该这样做,因为这是您想要[=24]的事情之一=] 你的测试揭示给你。但是如果你想让你的 class 中的这个弱点持续存在,那么你可以使用 an RSpec pre-condition 让 RSpec 为你声明合适的 class ,所以要求是其实很满意