1

我有一个 Rails 应用程序和一个测试人员,他正在开发一个用 Java 编写的基于 Selenium 的外部测试系统。我们想知道他的测试套件当前的代码覆盖率,所以我想在我的 :development 环境中使用 SimpleCov,然后让他将他的测试套件指向它。

我尝试将 SimpleCov 行放在 env/development.rb 的顶部,但它只创建了 ./coverage 目录,它实际上并没有更新我在应用程序中尝试的任何点击的覆盖率报告。我想也许如果我退出 webrick,它会写出来,但仍然没有。

SimpleCov 可以做到这一点吗?(或 Ruby 中的任何其他覆盖工具?)如何?

4

1 回答 1

1

通过执行以下操作,我在 Rails2 下得到了这个工作(但 Rails3 应该不会太不同):

将以下行添加到您的顶部config/environments/development.rb

require 'simplecov'

# clean the existing coverage directory before writing the new results.
Dir.foreach("coverage") do |file|
  next if [".",".."].include?(file)
  FileUtils.rm_rf(File.join("coverage",file), :verbose=>true)
end

SimpleCov.start 'rails' do
  add_filter "/vendor/"
end

现在,去给你的一个控制器添加一个方便的控制器方法(我把它添加到了一个管理控制器,所以我知道它不会被意外调用,但是任何事情都会做,因为你保护它仅供开发使用):

class Admin::DebugController < ApplicationController

  if RAILS_ENV=="development"
    # see config/environments/development.rb
    def coverage
      SimpleCov.result.format!
      render :text => "Wrote results. STOP AND RESTART THE SERVER TO BEGIN A NEW COVERAGE RUN!!"
    end
  end

end

现在,正常启动您的 Rails 服务器并让您的外部测试套件针对它运行(或您的手动集成 QE 测试器;)

完成集成测试后,点击您在管理控制器中设置的 url,例如

http://localhost:3000/admin/debug/coverage

注意:此网址仅在开发中有效/存在!

瞧!覆盖率报告将写入coverage/**您的 rails 目录中。coverage/index.html您可以通过在浏览器中加载来查看它。

理由

虽然 SimpleCov 的正常使用是用于单元和功能测试,但添加评估外部集成测试的能力可以为 QE 测试人员提供有价值的反馈,了解他们的测试策略在目标 Rails 应用程序中实际测试的内容。

对于大多数 Rails 应用程序来说,这可能是一个微不足道的区别,但是当应用程序作为“传递”来处理来自其他应用程序的大量数据并动态混合到应用程序模型中时(例如,仪表板或控制台应用程序)。在这些类型的应用程序中,rails 测试人员可能认为他们正在测试应用程序的排列,而实际上他们正在测试底层数据(例如网络集群)的排列。在这种情况下,代码覆盖率提供了对正在测试的内容的额外可见性。

于 2012-09-18T17:52:42.737 回答