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 ,所以要求是其实很满意