はじめに
Ruby on Railsプロジェクトの手動テストでもコードカバレッジできたので、その方法をメモしておきます。
通常、カバレッジは自動テストコードの実行とともに計測するものですが、何らかの事情で自動テストコードが不足していてカバレッジが計測できない、あるいはカバレッジがとても低いといったことがあるかと思います。
本来、自動テストコードを書き足してカバレッジを上げるべきなのですが、それができない場合、せめて手動テストのカバレッジを計測できれば、手動テストの有効性が可視化できるのではないかと考えました。
前提
カバレッジ計測用のgemとしてSimpleCovが導入されている前提です。
このgemを普通に使うための導入や設定方法は他の記事を参考にしてください。この記事では手動テストでカバレッジする方法にフォーカスしてお伝えします。
計測の流れ
- 手動カバレッジの設定を行う(下記参照)
- Rails起動時にカバレッジの計測を開始する
- 各種手動テストを行う
- 手動テストが終わったらカバレッジの計測を止めてレポートを出力する
- レポートを見る
設定方法
Gemfile
group :development do
gem 'simplecov'
end
通常はtest環境で読み込むようになっていると思いますが、development環境でも読み込むようにします。
config/routes.rb
if Rails.env.development?
get 'simple_coverage', to: 'simple_coverage#output'
end
development環境のルーティングを追加
「手動テストが終わったらカバレッジの計測を止めてレポートを出力する」を実現するため
config.ru
if Rails.env.development?
require 'simplecov'
SimpleCov.start 'rails' do
add_filter '/test/'
add_filter '/config/'
add_filter '/vendor/'
end
end
「Rails起動時にカバレッジの計測を開始する」
development環境のみ。
フィルターやグループ設定ができます。これらはレポートを見やすくためのものです。
app/controllers/simple_coverage_controller.rb
class SimpleCoverageController < ApplicationController
def output
SimpleCov.result.format!
end
end
新しくコントローラーを用意して、ルーティングの設定と合わせます。
(既存のコントローラーにメソッドを追加するのでも問題なし)
「手動テストが終わったらカバレッジの計測を止めてレポートを出力する」を実現するため
必要に応じてセッションの無効化など行ったください。
結果を見る
アプリケーションフォルダ下のcoverageフォルダにあるindex.htmlをブラウザで開く
(SimpleCoverの設定によります)
最後に
今回、手動テストでコードカバレッジを計測したわけですが、何のために行うテストか、テストの回数や頻度はどれくらいか、テストにかかる時間はどれくらいか、といったことを考えて対応したいものです。
手動テストを完全になくすのは難しいですが、やっぱり自動テストでコードカバレッジできる方が嬉しいですね!