在.fixtures.yml
中,有从公共库下载的模块,例如以下示例中的stdlib和concat:
fixtures:
forge_modules:
stdlib: puppetlabs/stdlib
concat: puppetlabs/concat
每当运行 rspec-puppet 测试时,都需要下载这些模块。测试完成后,它们也会被删除。
如果所有测试都完全运行,那就太好了。但是,如果有需要单独运行的失败测试,则这些模块不可用。我必须一起运行所有测试(100+),因此可以下载和使用公共模块。当我调试一个小错误时,这很烦人。
有没有办法配置 rspec-puppet,这样它就不会每次都下载/删除这些公共模块?
最近,Puppetlabs_spec_helper实际上还是按照您想要的方式运行的,即除非所有测试都通过,否则不会清理夹具目录。
我注意到这里的这个补丁改变了这种行为。就其价值而言,我也不同意这种变化。
无论如何,如果你想要旧的行为,你可以:
使用早期版本的Puppetlabs_spec_helper。
定义自定义等级库任务。
或者只是运行
bundle exec rake spec_prep spec_standalone
.或者,如果您只想在一个文件中运行测试,请运行
bundle exec rake spec_prep; bundle exec rspec spec/somefile_spec.rb --fail-fast
。(--fail-fast
选项在调试失败的测试时很有用,它会导致 rspec 在第一次失败时中止。
要使用旧行为定义自定义规范任务,请将其添加到您的 Rakefile:
desc "Run spec tests and clean the fixtures directory if successful"
task :custom_spec do
Rake::Task[:spec_prep].invoke
Rake::Task[:spec_standalone].invoke
Rake::Task[:spec_clean].invoke
end
相反,如果您希望它永远不要清理灯具目录:
desc "Run tests but don't clean up spec dir"
task :custom_spec do
Rake::Task[:spec_prep].invoke
Rake::Task[:spec_standalone].invoke
end
无论哪种情况,您都可以使用以下方法运行测试:
$ bundle exec rake custom_spec