Ruby Rspec木偶模块测试:访问包含的类';习惯事实

Ruby Rspec木偶模块测试:访问包含的类';习惯事实,ruby,testing,rspec,puppet,rspec-puppet,Ruby,Testing,Rspec,Puppet,Rspec Puppet,是否有为puppet模块编写规范测试的标准模式,可以正确创建被测试模块包括的模块所需的自定义事实 我有一个模块,其类包括,它使用定制的fact::root_home(由puppetlabs/stdlib创建) 查看mongodb的测试代码(特别是),我看到了为测试创建:root_home事实的代码 但是,在我自己的模块中,除非我在我自己的测试代码中创建该事实,否则我的测试会以“求值错误:未知变量”的形式失败,这非常完美,因为测试套件中没有任何东西创建该事实 现在,我可以在spec_helper_

是否有为puppet模块编写规范测试的标准模式,可以正确创建被测试模块包括的模块所需的自定义事实

我有一个模块,其类包括,它使用定制的fact::root_home(由puppetlabs/stdlib创建)

查看mongodb的测试代码(特别是),我看到了为测试创建:root_home事实的代码

但是,在我自己的模块中,除非我在我自己的测试代码中创建该事实,否则我的测试会以“求值错误:未知变量”的形式失败,这非常完美,因为测试套件中没有任何东西创建该事实

现在,我可以在spec_helper_local.rb文件中为我的模块创建事实,但这将问题推到了楼上,不管谁将我的模块包括在他们的模块中


我该如何处理这件事?是否有人已经编写了递归地下降到包含的模块中并创建测试所需事实的代码?

将自定义事实添加到测试套件设置正是您应该做的

正如您正确地断言的那样,这不会帮助模块的下游用户,但这忽略了测试套件的要点:全面描述模块评估的环境


您可以研究为所有测试设置默认事实(并在此过程中获得一些其他漂亮的功能)。

将自定义事实添加到测试套件设置正是您应该做的

正如您正确地断言的那样,这不会帮助模块的下游用户,但这忽略了测试套件的要点:全面描述模块评估的环境


您可以研究为所有测试设置默认事实(并在此过程中获得一些其他漂亮的功能)。

我同意,必须添加模拟来对第三方代码的使用进行实际测试是非常烦人的。这尤其令人恼火,因为您的测试随时可能由于代码内部的更改而失败,例如,stdlib突然引入
root\u home
事实

我在我的
spec/spec\u helper.rb的顶部添加了:

如果环境包含?“模块路径'
top_path=File.dirname(File.dirname(_File__;))
ENV['FACTERLIB']=ENV['MODULEPATH'].split(/:/).map do | p|
p、 以“/”开头?p:File.join(顶部路径,p)
end.map do|p|
Dir.glob(File.join(p,'*/lib/facter'))
end.flant.join(“:”)
结束
加载Facter库时,它将使用FACTERLIB环境变量,并评估环境中模块提供的所有自定义事实


测试环境时,
MODULEPATH
的一个典型值是“设计:模块”,测试模块时是“规格/固定装置/模块”。

我同意,必须添加模拟来对第三方代码的使用进行实际测试,这是非常烦人的。这尤其令人恼火,因为您的测试随时可能由于代码内部的更改而失败,例如,stdlib突然引入
root\u home
事实

我在我的
spec/spec\u helper.rb的顶部添加了:

如果环境包含?“模块路径'
top_path=File.dirname(File.dirname(_File__;))
ENV['FACTERLIB']=ENV['MODULEPATH'].split(/:/).map do | p|
p、 以“/”开头?p:File.join(顶部路径,p)
end.map do|p|
Dir.glob(File.join(p,'*/lib/facter'))
end.flant.join(“:”)
结束
加载Facter库时,它将使用FACTERLIB环境变量,并评估环境中模块提供的所有自定义事实


>代码>模块EPAST/CODE >的典型值是测试环境中的“设计:模块”和测试模块时的“规格/固定/模块”。

规范辅助器本地思想不坏,但也应考虑将其置于测试规范本身内的<>代码> 块中。据我所知,没有一种最佳的方法,这是你想要的。规范辅助器的本地思想并不坏,但也要考虑将它放在测试代码本身内的<>代码> 块中。据我所知,没有最佳的方法可以做到这一点,这正是你想要的。