Unit testing 启动RSpec单元测试的正确方法

Unit testing 启动RSpec单元测试的正确方法,unit-testing,rspec,puppet,rspec-puppet,Unit Testing,Rspec,Puppet,Rspec Puppet,我创建了一个简单的Puppet 4类和一个单元测试,如下所示(在模块/test/中执行touch metadata.json;rspec Puppet init之后): 在modules/test/中,我可以通过执行rspec spec/classes/test\uuuuu hello\u world1\u spec.rb成功运行单元测试 现在我想继续学习一个稍微高级一点的类,它使用另一个模块的代码,即(该模块已经安装在modules/concat)中: 当我尝试使用rspec spec/cla

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

modules/test/
中,我可以通过执行
rspec spec/classes/test\uuuuu hello\u world1\u spec.rb
成功运行单元测试

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

当我尝试使用
rspec spec/classes/test\uuuu hello\u world2\u spec.rb运行此单元测试时,在
modules/test
中,我收到一条错误消息,其中包括:

失败/错误:编译期间{is_expected.to compile}错误: 求值错误:求值资源语句时出错,未知 资源类型:“concat”

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

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

从its为您的平台安装。使用
pdk new module
pdk new class
或按照以下步骤重新创建模块

现在,我来谈谈您的代码中可能存在的直接问题:您的代码依赖于Puppet Forge模块,
puppetlabs/concat
,但您还没有提供它。PDK模块模板已经预先配置了
puppetlabs\u spec\u helper
,以加载模块的夹具

要告诉
puppetlabs\u spec\u helper
为您获取它,您需要一个包含以下内容的文件
.fixtures.yml

fixtures:
  forge_modules:
    stdlib: puppetlabs/stdlib
    concat: puppetlabs/concat
请注意,您还需要
puppetlabs/stdlib
,因为这是
puppetlabs/concat
的依赖项

如果您想探索更多夹具的可能性,请参阅

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

$ pdk test unit
请注意,我在一篇博客文章中写了所有关于底层技术的内容,展示了如何从零开始设置rspecpuble和更多内容(),它似乎仍然是关于这个主题的最新参考资料

要了解更多关于rspec傀儡的信息,请参考官方网站

fixtures:
  forge_modules:
    stdlib: puppetlabs/stdlib
    concat: puppetlabs/concat
$ pdk test unit