これを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
次に、便利なコントローラーメソッドをコントローラーの1つに追加します(管理コントローラーに追加したので、誤って呼び出されることはありませんが、開発専用に保護しているため、何でもできます):
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
注:このURLは開発中にのみ機能/存在します!
出来上がり!coverage/**
カバレッジレポートは、railsディレクトリに書き出されます。coverage/index.html
ブラウザに読み込んで表示できます。
正当化
SimpleCovの通常の使用法はユニットおよび機能テストを対象としていますが、外部統合テストを評価する機能を追加すると、QEテスターは、ターゲットレールアプリケーション内でテスト戦略が実際に何をテストするかについて貴重なフィードバックを得ることができます。
これは、ほとんどのRailsアプリケーションにとっては些細な違いかもしれませんが、アプリケーションが、アプリケーションモデルに動的に混合される他のアプリケーションからの大量のデータの「パススルー」として動作する場合に役立ちます(たとえば、ダッシュボードまたはコンソールアプリ)。これらの種類のアプリでは、レールテスターは、実際には基盤となるデータ(ネットワーククラスターなど)の順列をテストしているのに、アプリの順列をテストしていると考える場合があります。この状況では、コードカバレッジにより、テスト対象の可視性がさらに高まります。