通过执行以下操作,我在 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 测试人员可能认为他们正在测试应用程序的排列,而实际上他们正在测试底层数据(例如网络集群)的排列。在这种情况下,代码覆盖率提供了对正在测试的内容的额外可见性。