启动 RSpec 傀儡单元测试的正确方法



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

# 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

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

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

# 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

当我尝试在modules/testrspec spec/classes/test__hello_world2_spec.rb运行此单元测试时,我收到一条错误消息,其中包括:

失败/错误:编译过程中 { is_expected.编译 } 错误: 评估错误:评估资源语句时出错,未知 资源类型:"康卡特">

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

我的问题是:我应该如何启动单元测试,尤其是那些需要访问其他模块的测试?

从下载页面为您的平台安装 PDK。使用pdk new modulepdk new class或按照指南重新创建模块。

现在,我来到了你的代码中可能直接的问题:你的代码依赖于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的文档。

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

$ pdk test unit

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

要阅读有关 rspec-puppet的更多信息,请参阅官方 rspec-puppet 文档网站。

相关内容

  • 没有找到相关文章

最新更新