3
0

More than 1 year has passed since last update.

RailsのバージョンアップのためにRSpecテストを書いたのでメモメモ

Last updated at Posted at 2023-09-19

どうもこんにちは。

今回は以前投稿したこちらの記事の派生で、RSpecテストについて記載します。

RSpecってどんなやつ?

RSpecテストとは、Railsのモデル、ビュー、コントローラなどのコードを実際に動かしているかのように 動的なテスト をしてくれるツールです。

(コーディング規約に反していないかチェックするツールとしてRuboCopというツールがありますが、別の記事でメモしました。)

RSpecのメリット

  • 書いたコードのエラーを自動で発見することができる
  • Railsをバージョンアップさせたときに実行すれば、修正の必要箇所がよくわかる

RSpecのデメリット

  • 自分でテストコードを書かなければならない

テストコードを書くのがかなり時間がかかります。。。

導入方法

最低限のRailsアプリケーションが構築されている状態であると仮定して説明を進めます。

1. Gemを追加する。

Gemfileに以下のコードを記述します。

group :development, :test do
    gem 'rspec-rails', '~> 5.0'
    gem 'factory_bot_rails'
    gem 'faker'
    gem 'capybara'
    gem 'database_cleaner-active_record'
    gem 'simplecov'
end
  • factory_bot_rails・・・テストデータを簡単に作成するためのライブラリ
  • faker・・・ランダムなテストデータを生成するためのライブラリ(メールアドレスなど)
  • capybara・・・システムテストやフィーチャーテストを書くためのライブラリ
  • database_cleaner-active_record・・・テストの前後でデータベースをクリーンに保つためのライブラリ
  • simplecov・・・RSpecテストのカバレッジを測定、可視化するためのライブラリ

2. bundle installの実行

ターミナルでbundle installを実行します。

3. RSpecの初期設定

ターミナルでrails g rspec:installを実行します。
これを実行すると、.rspecspec/spec_helper.rbspec/rails_helper.rbが自動生成されます。

4. 設定の調整

.rspecファイル

.rspecファイルに以下のコードを記述します。

--require spec_helper
--format documentation

spec/rails_helper.rbファイル

spec/rails_helper.rbファイルに以下のコードを記述します。

# deviseを導入している場合には必要
config.include Devise::Test::IntegrationHelpers, type: :request

# FactoryBotのメソッドを簡単に使用するためのコード
config.include FactoryBot::Syntax::Methods

config.include FactoryBot::Syntax::Methodsについては別の記事でメモします。

5. SimpleCovの設定

spec/spec_helper.rbの先頭に以下のコードを追加します。

require 'simplecov'
SimpleCov.start

5. テストの記述

最初は、アクション1つにつきテスト1つのテストを書いていきます。(最初はUsersコントローラのテストを書くのがおすすめです。)

6. テストの実行

ターミナルで以下のコマンドを実行します。

bundle exec rspec

実行結果はターミナルに出力されます。テストが全て成功するまでテストコードを追加・修正をしていきます。

この時に、coverageディレクトリが自動生成されます。ブラウザでcoverage/index.htmlを開くと以下の画像のようなページが閲覧できます。

covorage一覧.png

ここで確認すべきは、app/controllers/users_controller.rbなどのコントローラやモデルファイルのコード全てをカバーできているかどうかです。それは、カバレッジ一覧画面のapp/controllers/users_controller.rbをクリックして確認してみてください。以下のようにファイルごとのカバレッジが確認でき、どのコードがカバーされていないかまで確認することができます。

ファイルごとカバレッジ例.png

ちょいめも

特定のテストコードだけ実行したいとき

特定のファイルだけのテストを実行したい場合は、以下のようにパスを指定します。

bundle exec rspec spec/requests/users_controller_spec.rb

## RSpecの実行結果をHTML形式で見たいとき

RSpecの実行結果をHTML形式で見たい場合は、.rspecファイルに以下のコードを記述します。

--require spec_helper
--format html
--out spec/results/rspec_result.html

これでbundle exec rspecを実行すると以下のような画面が出てきます。

スクリーンショット 2023-09-15 18.32.10.png

テストが成功しているときは緑、失敗した時は赤で結果が表示されます。もちろん、そのテストコードで失敗しているかも表示してくれます。

まとめ

今回はRSpecテストについてメモしてみました。

RSpecはAPI通信とかもテストできるので便利だなぁと感じます。

テストコードを書くのはちょっと難易度高めですが。。。

以上

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