1

我想将RSpec 单元测试添加到一些 Puppet 4 模块中。要开始并确认基本功能,我首先要运行标准 Puppet 模块(例如puppetlabs/apt )附带的单元测试。

如果我尝试像这样运行特定的单元测试

cd modules/apt
rspec spec/classes/apt_spec.rb

我只得到了失败,并且一些诊断输出似乎表明 Puppet 运行时环境的一部分(例如 module stdlib,它定义了 function merge)没有被正确拾取:

Failures:

  1) apt defaults should contain File[sources.list] that notifies Class[Apt::Update]
     Failure/Error:
       it { is_expected.to contain_file('sources.list').that_notifies('Class[Apt::Update]').only_with({
         :ensure  => 'file',
         :path    => '/etc/apt/sources.list',
         :owner   => 'root',
         :group   => 'root',
         :mode    => '0644',
         :notify  => 'Class[Apt::Update]',
       })}

     Puppet::PreformattedError:
       Evaluation Error: Unknown function: 'merge'. at /home/MY_USER/modules/apt/spec/fixtures/modules/apt/manifests/init.pp:50:14 on node MY_HOST

如果我尝试像这样运行所有单元测试

rake spec

我收到此错误消息:

rake aborted!
NameError: uninitialized constant Bundler
/home/MY_USER/modules/apt/Rakefile:3:in `<top (required)>'
(See full trace by running task with --trace)

在这些尝试之前,我已经采取了这些步骤来准备运行时环境(在 Debian 主机上):

 mkdir modules
 cd modules
 puppet module --modulepath=. install puppetlabs-apt # installs also stdlib
 sudo gem install rspec-puppet
 sudo gem install puppet
 sudo gem install puppetlabs_spec_helper
 sudo apt-get install rake

我的问题是:如何正确准备运行时环境并成功运行 Puppet Forge 的 Puppet 模块附带的单元测试,例如puppetlabs/apt

4

1 回答 1

1

为此,您首先需要确保已安装Ruby Gems。然后确保你已经安装了 bundler,这通常意味着输入:

$ gem install bundler

接下来,我假设你已经克隆了 apt 模块,所以 cd 进入你克隆它的目录,然后安装你的包:

$ bundle install

现在,您选择的特定模块存在问题。当我尝试运行 bundle install 我得到:

Could not find gem 'puppet-module-posix-default-r2.0' in any of the gem sources listed in your Gemfile or available on this machine.

目前我不确定这意味着什么,可能有人需要提出一个错误。

我希望能够通过使用来解决它:

$ bundle install --without development system_tests

即使这样也不起作用,所以我只是注释掉了这些组。

接下来,使用以下命令运行测试:

$ bundle exec rake spec

这通常会运行测试。但是,我认为 Puppet 已经打破了公司外部人员的 Rspec 测试。

我将跟进此事并回来更新我已经弄清楚发生了什么的答案。

我将把这个答案留在这里,因为它仍在记录正确的程序。

另请参阅我关于此主题的博客文章,尽管现在可能有点过时了。如果有什么我需要更新的,请告诉我。

于 2017-08-18T07:57:42.157 回答