我通过以下方式在 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 测试器;)
完成集成测试后,点击您在管理控制器中设置的网址,例如
http://localhost:3000/admin/debug/coverage
注意:此网址仅在开发中有效/存在!
瞧!覆盖率报告将写入您的 rails 目录中的coverage/**。您可以通过在浏览器中加载coverage/index.html 来查看它。
理由
虽然 SimpleCov 的正常用法是用于单元和功能测试,但添加评估外部集成测试的能力可以为 QE 测试人员提供有价值的反馈,了解他们的测试策略实际上在目标 Rails 应用程序中测试的内容。
对于大多数 Rails 应用程序来说,这可能是一个微不足道的区别,但是当应用程序作为“传递”来处理来自其他应用程序的大量数据并动态混合到应用程序模型中时(例如例如,仪表板或控制台应用程序)。在这些类型的应用程序中,rails 测试人员可能认为他们正在测试应用程序的排列,而实际上他们正在测试底层数据(例如网络集群)的排列。在这种情况下,代码覆盖率提供了对正在测试的内容的额外可见性。