LoginSignup
13
7

More than 3 years have passed since last update.

【Rails】 SimpleCovの概要・導入・オプション

Last updated at Posted at 2021-02-10

はじめに

「SimpleCovって何?」っていう状態から導入をしましたので、調べたことについてまとめておきます。
全くSimpleCovについて知らない方が、個人開発や業務で導入して設定するまでの参考になれば幸いです。

ちなみに筆者は最近エンジニアとして働き出したレベルの者です。

目次

対象読者

・SimpleCovってそもそも何という方
・SimpleCovは知っているけど実際の導入の仕方を知りたい方
・導入はとりあえずできるけど、追加でどんなオプションがあるか知りたい方

環境

  • Ruby 2.7.2
  • Rails 6.0.3
  • rspec-rails 4.0.2
  • simplecov 0.21.2

そもそもSimpleCovとは

・Ruby用のコードカバレッジ分析ツール
(分かりやすく言うと、コードカバレッジを計測するためのgemです。)

[公式ドキュメント] https://github.com/simplecov-ruby/simplecov

SimpleCov is a code coverage analysis tool for Ruby.

コードカバレッジとは何か

  • テストの対象となるプログラムコードのうち、テストされたコードの割合(%で表示される)
余裕がある方向け
  • コードカバレッジには、厳密には3つの種類がある(C0,C1,C2)
    • C0(ステートメントカバレッジ):テストの対象となるプログラムコードのうち、命令文を実行した割合。
    • C1(ブランチカバレッジ):テストの対象となるプログラムコードのうち、分岐の真/偽を実行した割合
    • C2(改良条件判定カバレッジ):テスト対象となるプログラム中において、各ユニット内の条件・判定を網羅した割合
  • そのうちSimpleCovが計測するコードカバレッジはC0(ステートメントカバレッジ)
調べる中でテストカバレッジとコードカバレッジの違いが分からない方向け
  • コードカバレッジはテストカバレッジの一種
  • テストカバレッジには、コードカバレッジ以外に機能カバレッジやデータカバレッジがある

導入方法

①Gemfileに以下を追加(→bundle insatll)

Gemfile
gem 'simplecov', require: false, group: :test

②spec/spec_helper.rbの一番上の部分に以下を追加

spec/spec_helper.rb
require 'simplecov'
SimpleCov.start

#デフォルトで記載されている部分
RSpec.configure do |config| 
.
.
end

使い方

①rspecを実行する

bundle exec rspec 

②出力されたcoverage/index.htmlをブラウザで開く

コードカバレッジの計測結果(下の画像のようなもの)が出ていればOK

[公式ドキュメントのサンプル画像] https://github.com/simplecov-ruby/simplecov
image.png

オプションの設定

ここからは、オプションの設定について説明していきます。

①フィルター

計測対象から指定したファイル名を含むファイルを除外する
導入方法の②で追加したSimpleCov.startにブロックでオプションの設定を渡していきます。

spec/spec_helper.rb
SimpleCov.start do
 add_filter "/test/" #testを含むファイルが計測対象から除外される
end

②グループ化

計測結果を指定した内容でグループ化し、タブに分けて表示する
(グループ化していないものはUngroupedというタブとなる)
導入方法の②で追加したSimpleCov.startにブロックでオプションの設定を渡していきます。

spec/spec_helper.rb
SimpleCov.start do
 add_group "Models", "app/models" #add_group "グループ化名", "グループ化したいパス"
 add_group "Controllers", "app/controllers"
end

③計測結果をCircleCIのARTIFACTSタブに表示

CircleCIでRspec実行後、CircleCI上のARTIFACTSタブにcoverage/index.htmlが含まれるようになる
(*これは、spec/spec_helper.rbではなくcircleci/config.ymlに下記コードを追加する)

circleci/config.yml
- store_artifacts:
   path: coverage
13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7