首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与parallel_spec任务一起使用时,代码覆盖率不起作用

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

Stack Overflow用户
提问于 2018-06-08 18:44:09
回答 1查看 153关注 0票数 2

我想知道为什么并行rspec显示的覆盖率和丢失的资源与我运行时相比有所不同。

下面是输出:

代码语言:javascript
复制
    Sysctl[net.ipv6.conf.all.accept_redirects]
      Sysctl[net.ipv6.conf.all.disable_ipv6]
      Sysctl[net.ipv6.conf.default.accept_ra]
      Sysctl[net.ipv6.conf.default.accept_redirects]
      Sysctl[net.ipv6.conf.default.disable_ipv6]
      Sysctl[net.ipv6.conf.lo.disable_ipv6]
      Sysctl[vm.min_free_kbytes]
      Sysctl[vm.swappiness]
      Systemd::Unit_file[puppet_runner.service]
      Users[application]
      Users[global]
    F

Failures:

  1) Code coverage. Must be at least 95% of code coverage
     Failure/Error: RSpec::Puppet::Coverage.report!(95)

       expected: >= 95.0
            got:    79.01
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:104:in `block in coverage_test'
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:106:in `coverage_test'
     # /usr/local/bundle/gems/rspec-puppet-2.6.11/lib/rspec-puppet/coverage.rb:95:in `report!'
     # ./spec/spec_helper.rb:22:in `block (2 levels) in <top (required)>'

Finished in 42.12 seconds (files took 2.11 seconds to load)
995 examples, 1 failure

Failed examples:

rspec  # Code coverage. Must be at least 95% of code coverage


2292 examples, 2 failures


....................................................................

    Total resources:   1512
    Touched resources: 1479
    Resource coverage: 97.82%
    Untouched resources:

      Apt::Source[archive.ubuntu.com-lsbdistcodename-backports]
      Apt::Source[archive.ubuntu.com-lsbdistcodename-security]
      Apt::Source[archive.ubuntu.com-lsbdistcodename-updates]
      Apt::Source[archive.ubuntu.com-lsbdistcodename]
      Apt::Source[postgresql]

    Finished in 1 minute 25.3 seconds (files took 1.43 seconds to load)
    2292 examples, 0 failures
EN

回答 1

Stack Overflow用户

发布于 2018-06-10 20:25:39

因为这个问题并不完全清楚,我在这里假设您已经通过在spec/spec_helper.rb中添加一行代码来设置代码覆盖率,如下所示:

代码语言:javascript
复制
at_exit { RSpec::Puppet::Coverage.report!(95) }

覆盖率报告是由rspec-puppet提供的功能。

另外,我假设您有多个包含测试的spec文件,并且通过调用puppetlabs_spec_helper提供的parallel_spec任务来并行运行这些文件。

问题是:

为了使代码覆盖率正常工作,所有的Rspec任务都需要在同一进程中运行(请参阅代码here)。

同时,为了实现并行化,必须有多个spec文件,这些文件在单独的进程中并行运行。这种限制源于parallel_spec任务使用的parallel_tests库。请参阅其README

因此,代码覆盖率报告只计算在每个进程中看到的资源。

示例:

代码语言:javascript
复制
class test {
  file { '/tmp/foo':
    ensure => file,
  }
  file { '/tmp/bar':
    ensure => file,
  }
}

规范文件1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
require 'puppetlabs_spec_helper/module_spec_helper'
at_exit { RSpec::Puppet::Coverage.report!(95) }

并行运行:

代码语言:javascript
复制
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

在不并行的情况下运行:

代码语言:javascript
复制
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%
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50758894

复制
相关文章

相似问题

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