我想将RSpec unit tests添加到一些Puppet 4模块中。要开始并确认基本功能,我首先要运行标准Puppet模块附带的单元测试,例如puppetlabs/apt。
如果我尝试运行这样的特定单元测试
cd modules/apt
rspec spec/classes/apt_spec.rb
我只得到失败,并且一些诊断输出似乎表明Puppet运行时环境的一部分(例如模块stdlib
,它定义了函数merge
)没有被正确选取:< / p>
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
?
答案 0 :(得分:1)
要执行此操作,您需要首先确保已安装Ruby Gems。然后确保你有installed bundler,这通常只意味着输入:
$ gem install bundler
接下来,我假设你已经克隆了apt模块,所以进入你克隆的目录,然后安装你的软件包:
$ 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测试。
我将跟进此事并回来并更新我已经弄清楚发生了什么的答案。
我会在这里留下这个答案,因为它仍在记录正确的程序。
另请参阅关于此主题的blog post,尽管现在可能有点过时了。如果我需要更新,请告诉我。