【问题标题】:Simplecov coverage report seems to miss certain linesSimplecov 覆盖率报告似乎遗漏了某些内容
【发布时间】:2012-12-03 02:37:25
【问题描述】:

在对 simplecov 如何确定一条线路是否已通过测试进行了一些澄清之后。

我有以下方法:

def over?
  end_at < Time.zone.now
end

其中 end_at 是对象的 ActiveRecord 属性。

在以下规范中执行:

describe CalendarEntry do
  it 'can determine that an event has ended' do
    @entry.end_at = 1.day.ago
    @entry.over?.should be_true
  end
end

使用覆盖率运行规范后,它显示以下结果:

我已经在调试模式下运行了测试,并在此行设置了一个断点,并确认规范确实符合要求。

在此方法中,这并不仅仅局限于这一行,包括使用 ActiveRecord 关联的 getter 的每一行都显示为未涵盖。可能是巧合,但似乎有点奇怪。

环境:ruby 1.9.3-p327 (mri)、rails 3.2.8、simplecov 0.7.1、rspec 2.10.0。

关于为什么 simplecov 认为它没有被涵盖的任何想法?

【问题讨论】:

  • 您是否有一个测试会为 over? 返回 false?这可以解释被命中的方法,但不能解释正在测试的代码的所有结果。
  • 谢谢@PaulFioravanti,我也有一个阴性测试,它是作为这次报道会议的一部分运行的。
  • 您能找出问题所在吗?如果有,请分享!如果没有,您能否编辑您的问题以包含您的规范的全文,即定义@entry 的位置以及测试的subject 是什么。
  • 我遇到了同样的问题。我在 1.9 模式下使用 JRuby 1.7.1、Rails 3.2.11 和最新的 Simplecov 版本。由于我在每次运行时都有调试标志警告,我认为它可能是相关的。如果您找到解决方案,请随时通知我们。

标签: ruby-on-rails ruby rspec code-coverage


【解决方案1】:

好的,所以我添加了与在 Windows 上运行的 JRuby 相同的问题。 答案实际上是提示给我的,Simplecov 如果不在调试模式下运行,可能会漏掉一些行。

(j)ruby --debug -S rspec spec

使用 --debug 选项它确实有效,并且我按预期恢复了 100% 的覆盖率。

【讨论】:

  • 这听起来很有希望,但运行(在我的情况下)ruby --debug bin/rails test:system 并没有改变覆盖结果。我的产品线没有被正式覆盖,尽管它显然是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
相关资源
最近更新 更多