2012-12-15 39 views
7

只是在simplecov如何确定一条线是否被测试行使之后作了一些说明。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 

运行与覆盖该规范之后,它显示了以下结果:

coverage report

我已经运行在调试模式下测试在这条线上有一个断点,并确认该规范确实击中了它。

这不是孤立在这个方法中的这一行,包括使用ActiveRecord关联的getter的每一行都没有被显示。可能是巧合,但似乎有点奇怪。

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

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

+0

你有一个测试,将返回错误'over?'?这可以解释被击中的方法,但不是所有测试代码的结果。 –

+0

谢谢@PaulFioravanti,我也有一个负面测试,它作为本次报道会的一部分运行。 –

+0

你能找出问题出在哪?如果是这样,请分享!如果没有,你是否可以编辑你的问题来包含你的规范的全文,即在哪里定义了@入口,以及测试的主题是什么。 –

回答

1

好的,我在JRuby上运行Windows时添加了同样的问题。 答案实际上是提示给我的,如果没有在调试模式下运行,Simplecov可能会错过一些行。

(j)ruby --debug -S rspec spec 

有了--debug选项,它确实有效,我按预期返回了100%的覆盖范围。