首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加速Chefspec跑

加速Chefspec跑
EN

Stack Overflow用户
提问于 2013-12-10 13:54:25
回答 1查看 974关注 0票数 1

我有很多食谱,它们都是用ChefSpec进行大量测试的。我有800多个规范,在提交代码之前每次运行它们已经成为一个问题,因为在我的机器上运行它们大约需要20分钟。这使得~0.(6)s的每个规格,这不是很多,但加起来很长的时间。

有没有可能并行运行ChefSpec/RSpec测试,或者以其他方式提高速度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-10 15:34:08

更新2014年1月4日:下面的想法现在在ChefSpec (>= 3.1.2)中实现。在自述中看到更快的规范部分。

================================

这是摘录自一个 博客,其中包含了更多的细节。

RSpec允许用自己的方法扩展模块和其思想是编写类似于let的方法,但它也会在示例中缓存结果。在主厨项目的某个位置创建一个*spec_helper.rb*文件,并在其中添加以下行:

代码语言:javascript
复制
module SpecHelper
  @@cache = {}
  def shared( name, &block )
    location = ancestors.first.metadata[:example_group][:location]
    define_method( name ) do
      @@cache[location + name.to_s] ||= instance_eval( &block )
    end
  end

  def shared!( name, &block )
    shared name, &block
    before { __send__ name }
  end
end

RSpec.configure do |config|
  config.extend SpecHelper
end

@@cache中的值永远不会被删除,您可以在这个块中使用相同的名称,所以我还使用了用法的位置,如下所示:"./cookbooks/my_cookbook/spec/default_spec.rb:3".现在,在您的规范中将let( :chef_run )转换为shared( :chef_run )

代码语言:javascript
复制
describe "example::default" do
  shared( :chef_run ) { ChefSpec::ChefRunner.new.converge described_recipe }
  [...]
end

在运行测试时,现在还必须包括spec_helper.rb:

代码语言:javascript
复制
rspec --include ./relative/path/spec_helper.rb cookbooks/*/spec/*_spec.rb
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20496382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档