0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProgakuAdvent Calendar 2024

Day 20

RSpecのカバレッジ率を出力してみた

Last updated at Posted at 2024-12-20

はじめに

本記事はProgaku Advent Calendar 2024の20日目の記事となります。

今回はRSpecを書いていてどれくらいソースコードに対してテストを網羅出来ているかを可視化してみようというテーマで書こうと思います。

試した環境は
・Rails 7.1.3
・Ruby 3.3.3
・RSpec 6.1.3
です。

gemを導入する

今回はSimpleCovというgemを使用してみました。
GitHub

README通りGemfileに下記を追記してbundle installを実行します。

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

spec/spec_helperの最上部に下記を追加します。

spec/spec_helper
require 'simplecov'
SimpleCov.start

導入結果

rspecを実行します。

bundle exec rspec

実行後にcoverageというディレクトリが追加されます。

スクリーンショット 2024-12-20 17.21.10.png

この中にあるindex.htmlを開いてみます。

スクリーンショット 2024-12-20 17.25.45.png

全体のカバレッジ率と各ファイルに対するカバレッジ率が可視化出来ました。

個別ファイルを見ると、カバー出来ている部分は緑、カバー出来ていない部分は赤でハイライトされています。

スクリーンショット 2024-12-20 17.30.27.png

上記コードはspec/rails_helper.rbになりますが、こんな感じでハイライトされるというためのものなので内容に特に意味はないです。

設定関連

specディレクトリは対象から除外しても良いかなと思うので、spec/spec_helperに以下を追記します。

spec/spec_helper
SimpleCov.start do
  # add_filter "対象外にしたいディレクトリ"を記載することでカバレッジの対象外になる
 add_filter "/spec/"
end

これで/specはカバレッジの対象外となります。

また、ModelsやControllersなどでグルーピングしたい場合は以下を追記します。

spec/spec_helper
SimpleCov.start do
  add_group 'Models', 'app/models'
  add_group 'Controllers', 'app/controllers'
end

設定後に再度bundle exec rspecを実行し/coverage/index.htmlを開くと下記のようにグルーピングされます。(赤枠部分)

スクリーンショット 2024-12-20 17.53.47.png

また、git管轄でcoverageを管理する必要もないかと思うので、.gitignorecoverageを追記しておくか、

echo coverage >> .gitignore

で設定しておくといいかもしれないです。

まとめ

導入も簡単に出来るので、

どこまでRSpecを書けばいいんだろう

どれくらいソースコードに対してテスト出来てるのか知りたい

みたいな方は一度導入してみるのもいいのかなと思いました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?