我有很多食谱,它们都是用ChefSpec进行大量测试的。我有800多个规范,在提交代码之前每次运行它们已经成为一个问题,因为在我的机器上运行它们大约需要20分钟。这使得~0.(6)s的每个规格,这不是很多,但加起来很长的时间。
有没有可能并行运行ChefSpec/RSpec测试,或者以其他方式提高速度?
发布于 2013-12-10 15:34:08
更新2014年1月4日:下面的想法现在在ChefSpec (>= 3.1.2)中实现。在自述中看到更快的规范部分。
================================
这是摘录自一个 博客,其中包含了更多的细节。
RSpec允许用自己的方法扩展模块和其思想是编写类似于let的方法,但它也会在示例中缓存结果。在主厨项目的某个位置创建一个*spec_helper.rb*文件,并在其中添加以下行:
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 ):
describe "example::default" do
shared( :chef_run ) { ChefSpec::ChefRunner.new.converge described_recipe }
[...]
end在运行测试时,现在还必须包括spec_helper.rb:
rspec --include ./relative/path/spec_helper.rb cookbooks/*/spec/*_spec.rbhttps://stackoverflow.com/questions/20496382
复制相似问题