与parallel_spec任务一起使用时,代码覆盖率不起作用

时间:2018-06-08 10:44:09

标签: testing rspec puppet parallel-testing

我想知道为什么并行rspec显示不同的覆盖百分比和错过的资源与没有并行化的情况相比。

这是输出:

Arena

1 个答案:

答案 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%