🌵

テストコードの記述に最低限必要な情報

2023/01/18に公開

背景

テストコードを記述する際に、いつも情報を忘れてWebの資料探して、
っという感じだったので自分の知識定着も兼ねて、
最低限必要な準備と、利用するコマンド、最低限のテストコードをまとめました。

1.事前準備

1-1.gemの追加

group :development, :test do
    中略
  gem 'rspec-rails', '~> 4.0.0'
  gem 'factory_bot_rails'
  gem 'faker'
end

💡 gemを記述後「bundle install」を実施
💡 factory_botは事前にインスタンスの雛形を作成して、テストコードで利用するgem
💡 fakerはランダムな値を生成するgem

1-2.RSpecの設定

①rspecのinstall

  rails g rspec:install

②.rspecに設定を記述

--format documentation

💡 上記を追記する事で、ターミナルでテストコードの結果が確認できるようになる

2.テストコードで利用するコマンド

rails g rspec:model モデル名

💡 テストコードを記述するファイルと、FactoryBotを記述する以下ファイルが作成される
create spec/models/モデル名_spec.rb
create spec/factories/モデル名の複数形.rb

bundle exec rspec spec/models/モデル名_spec.rb

💡 モデル名_spec.rbに記述したテストコードを実行するコマンド

3.単体テストの参考コード

テストコードで利用するメソッド

No 関数 用途 利用例
1 describe どの機能に対してのテストか ユーザー新規登録
6 context どのような条件のテストか
(正常系/異常系)
正常系:新規登録できる
異常系:新規登録できない
2 it どのような状況のテストか nicknameが空では登録できない
3 valid? validationを実行する モデル名.valid?
4 errors valid?実行時にエラーの内容を全て返す
(エラーがあれば)
モデル名.errors
5 full_messages errorsに含まれるエラーメッセージを返す モデル名.errors.full_messages

参考FactoryBot

/spec/factories/users.rb
FactoryBot.define do
  factory :user do
    email                 {Faker::Internet.free_email}
    password              {Faker::Lorem.characters(number: 6, min_alpha: 1, min_numeric: 1) }
    password_confirmation {password}
  end
end

参考テストコード

/spec/models/user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do

    #beforeでFactoryBotで作成した情報をインスタンス変数に代入する
  before do
    @user = FactoryBot.build(:user)
  end
  
  describe 'ユーザー新規登録' do
     #正常系テスト
     context 'ユーザー登録ができる' do
       it '全ての情報が正しく入力され、ユーザー登録ができる' do
          expect(@user).to be_valid
       end
     end
    
     #異常系テスト
    context 'ユーザー登録ができない' do
       it 'emailが空で登録できない' do
        @user.email = ''
        @user.valid?
        expect(@user.errors.full_messages).to include "エラーメッセージの内容"
      end
     end
   end
end

Discussion