我想知道为什么并行rspec显示不同的覆盖百分比和错过的资源与没有并行化的情况相比。
这是输出:
Arena
答案 0 :(得分:1)
因为问题并不完全清楚,我在此假设您已通过在spec / spec_helper.rb中添加一行来设置代码覆盖率,如:
at_exit { RSpec::Puppet::Coverage.report!(95) }
报道报告是由rspec-puppet提供的一项功能。
另外,我假设您有多个包含测试的spec文件,并且这些文件是通过调用puppetlabs_spec_helper提供的parallel_spec任务并行运行的。
问题在于:
要使代码覆盖正常工作,所有Rspec任务都需要在同一个进程中运行(请参阅代码here)。
同时,要进行并行化,必须有多个spec文件,这些文件在不同的进程中并行运行。该限制源于parallel_spec任务使用的parallel_tests库。见其README。
因此,代码覆盖率报告仅计算每个流程中看到的资源。
示例:
class test {
file { '/tmp/foo':
ensure => file,
}
file { '/tmp/bar':
ensure => file,
}
}
规范文件1:
require 'spec_helper'
describe 'test' do
it 'is expected to contain file /tmp/foo' do
is_expected.to contain_file('/tmp/foo').with({
'ensure' => 'file',
})
end
end
规范文件2:
require 'spec_helper'
describe 'test' do
it 'is expected to contain file /tmp/bar' do
is_expected.to contain_file('/tmp/bar').with({
'ensure' => 'file',
})
end
end
spec_helper.rb:
require 'puppetlabs_spec_helper/module_spec_helper'
at_exit { RSpec::Puppet::Coverage.report!(95) }
并行运行:
Total resources: 2
Touched resources: 1
Resource coverage: 50.00%
Untouched resources:
File[/tmp/bar]
Finished in 0.10445 seconds (files took 1.03 seconds to load)
1 example, 0 failures
Total resources: 2
Touched resources: 1
Resource coverage: 50.00%
Untouched resources:
File[/tmp/foo]
Must be at least 95% of code coverage (FAILED - 1)
4 examples, 0 failures
Took 1 seconds
没有并行化运行:
Finished in 0.12772 seconds (files took 1.01 seconds to load)
2 examples, 0 failures
Total resources: 2
Touched resources: 2
Resource coverage: 100.00%