正确启动RSpec-puppet单元测试的方法

时间:2017-08-21 07:46:28

标签: unit-testing rspec puppet rspec-puppet

我创建了一个简单的Puppet 4类和一个单元测试,如下所示(在touch metadata.json; rspec-puppet-init中执行modules/test/后):

# modules/test/manifests/hello_world1.pp
class test::hello_world1 {
  file { "/tmp/hello_world1":
    content => "Hello, world!\n"
  }
}

# modules/test/spec/classes/test__hello_world1_spec.rb
require 'spec_helper'
describe 'test::hello_world1' do
  it { is_expected.to compile }
  it { is_expected.to contain_file('/tmp/hello_world1')\
    .with_content(/^Hello, world!$/) }
end

我可以在rspec spec/classes/test__hello_world1_spec.rb内执行modules/test/来成功运行单元测试。

我现在想进入一个稍高级的类,它使用来自另一个模块的代码,即concat(该模块已安装在modules/concat中):

# modules/test/manifests/hello_world2.pp
class test::hello_world2
{
  concat{ "/tmp/hello_world2":
    ensure => present,
  }
  concat::fragment{ "/tmp/hello_world2_01":
    target  => "/tmp/hello_world2",
    content => "Hello, world!\n",
    order   => '01',
  }
}

# modules/test/spec/classes/test__hello_world2_spec.rb
require 'spec_helper'
describe 'test::hello_world2' do
  it { is_expected.to compile }
  # ...
end

当我在rspec spec/classes/test__hello_world2_spec.rb中尝试使用modules/test运行此单元测试时,收到包含以下内容的错误消息:

  

失败/错误:编译期间出现{is_expected.to compile}错误:   评估错误:评估资源语句时出错,未知   资源类型:' concat'

我怀疑根本原因是rspec无法找到其他模块,因为它没有被告知" modulepath"。

我的问题是:我应该如何开始单元测试,特别是那些需要访问其他模块的测试?

1 个答案:

答案 0 :(得分:3)

PDK为您的平台安装download page。使用pdk new modulepdk new class或遵循Guide重新创建模块。

现在,我想到了代码中可能存在的直接问题:您的代码依赖于Puppet Forge模块,puppetlabs/concat但您尚未提供它。 PDK模块模板已经预先配置puppetlabs_spec_helper来为您的模块加载灯具。

要告诉puppetlabs_spec_helper为您提供,您需要一个包含以下内容的文件.fixtures.yml

fixtures:
  forge_modules:
    stdlib: puppetlabs/stdlib
    concat: puppetlabs/concat

请注意,您还需要puppetlabs/stdlib,因为这是puppetlabs/concat的依赖关系。

如果您想探索更多灯具的可能性,请参阅puppetlabs_spec_helper's docs

有了所有这些,并将您发布的代码示例和测试内容集成到PDLK提供的初始代码框架中,您的测试将在您运行时全部通过:

$ pdk test unit

请注意,我已经在博客文章中写了所有关于底层技术的文章,展示了如何从头开始设置Rspec-puppet等等(ref),它似乎仍然是最好的 - 关于这个主题的日期参考。

要了解有关rspec-puppet的更多信息,请参阅官方rspec-puppet docs site