在完成rspec-puppet测试后,不要删除公共木偶模块

时间:2017-10-20 18:27:09

标签: rspec puppet rspec-puppet

.fixtures.yml中,有从公共库下载的模块,例如以下示例中的stdlib和concat:

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

每当运行rspec-puppet测试时,都需要下载这些模块。测试完成后,它们也会被删除。

如果所有测试都完全运行,那就太好了。但是,如果需要单独运行的测试失败,则这些模块不可用。我必须一起运行所有测试(100+),因此可以下载和使用公共模块。当我调试一个小错误时,这非常烦人。

有没有办法配置rspec-puppet,以便每次都不下载/删除这些公共模块?

1 个答案:

答案 0 :(得分:4)

直到最近,Puppetlabs_spec_helper实际上表现得如你所愿,即除非所有测试都通过,否则没有清理fixtures目录。

我注意到这个补丁here改变了这种行为。对于它的价值,我也不同意这种改变。

无论如何,如果你想要旧的行为,你可以:

  1. 使用早期版本的Puppetlabs_spec_helper。

  2. 定义自定义规范任务。

  3. 或者只是运行bundle exec rake spec_prep spec_standalone

  4. 或者,如果您只想在一个文件中运行测试,请运行bundle exec rake spec_prep; bundle exec rspec spec/somefile_spec.rb --fail-fast。 (调试失败的测试时,--fail-fast选项很有用,导致rspec在第一次失败时中止。)

  5. 要使用旧行为定义自定义规范任务,请将其添加到您的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
    

    相反,如果你想要它永远不要清理fixtures目录:

    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