2

我有一个项目我想获得代码覆盖率。这只是一个不在 Rails 上的标准 JRuby 项目,我想知道如何让 RCov 工作。我已经尝试了很长时间才能得到结果,但我只是不知道发生了什么。我得到了一个要显示的覆盖文件夹,但是所有文件要么在需要时出现加载错误,要么加载的文件根本没有说它们已经过测试(我知道在一种情况下是胡扯,因为我制定了测试规范为了它)。谁能向我解释如何让 RCov 工作或为什么我收到附加错误?我不明白您应该如何/为什么要为包含的库执行 -I 或这样做的意义何在。从我到目前为止所做的事情来看,我只是从我的主 appcode 目录运行 rcov spec/.rb 并生成我的覆盖文件夹和:.rb /home/ben/.rvm/gems/jruby-1.6.8/gems/rcov-0.9.11-java/lib/rcov/differential_analyzer.rb:31 警告:跟踪(例如set_trace_func)不会捕获所有事件--debug flag NoMethodError: undefined method `describe' for main:Object (root) at ./spec/ncrf_spec.rb:3

4

1 回答 1

2

RCov严格限于Matz 的Ruby (MRI) 1.8.x 参考实现,甚至不适用于 MRI 1.9.x。

SimpleCov 是一种新的方式,因为它使用新的Ruby Coverage API。JRuby 有一段时间不支持这个 API,或者至少在生产环境中不支持。SimpleCov 的 bugtracker 上的原始问题没有明确说明它现在可以工作。但是,他们在 JRuby 跟踪器中提出的有关此 Ruby Coverage API 无法正常工作的问题表明此问题现已解决。

我想你应该试试 JRuby 和 SimpleCov 的最新版本。

关于另一个话题:

Ruby 的-I标志将目录添加到$LOAD_PATH数组中,该数组定义了.rb当您尝试使用require. 从 Ruby 1.9.x 开始,只有当它们位于其中一个目录中时才能找到文件,$LOAD_PATH并且相对于 Ruby 进程的当前工作目录不再可以找到它们。

于 2012-11-10T13:30:18.310 回答