yuta_eng_prg’s diary

筆者がプログラミング学習の内容を綴るだけのブログです。

テストコード(FactoryBotの導入)

テストコードにおけるFactoryBotの導入方法について確認します。

FactoryBotは、インスタンスをまとめることができるGemで、他のファイルであらかじめ各クラスのインスタンスに定める値を設定しておき、テストコードで使用できます。

まずは、Gemfileの group :development, :test do の中を以下のように記述します。

group :development, :test do
中略 以下のコードを追加します
  gem 'factory_bot_rails'
end

その後、ターミナルで

% bundle install

上記のコマンドを実行します。

次に、FactoryBotの記述を格納するディレクトリ「factories」と、その中にFactoryBotのファイル(今回はUserモデルに対するusers.rb)を作成します。(FactoryBotの導入後自動生成される場合もあります。)

作成したファイルを、

FactoryBot.define do
  factory :user do
    nickname              { Faker::Name.name }
    email                 { Faker::Internet.free_email }
    password              { 'aaa1234' }
    password_confirmation { password }
    last_name             { Gimei.last.kanji }
    first_name            { Gimei.first.kanji }
    last_name_kana        { Gimei.last.katakana }
    first_name_kana       { Gimei.first.katakana }
    birthday              { Faker::Date.birthday }
  end
end

以上のような記述を行い必要なカラムに具体的な値を入れるように設定します。(今回はFakerやGimeiのGemを使い、具体的なカラムの値がランダム生成されるように設定しています。)

最後に、テストコードに、

require 'rails_helper'

RSpec.describe User, type: :model do
以下のように事前にインスタンスが生成されるようにコードを記述する
  before do
    @user = FactoryBot.build(:user)
  end
ここまでのコードを追加する

  describe 'ユーザー新規登録' do
    context '新規登録がうまくいくとき' do
      it 'nicknameと,email, password, password_confirmation, last_name, first_name, last_name_kana,first_name_kana, birthdayが存在すれば登録できる' do
        expect(@user).to be_valid
      end
      it 'passwordが6文字以上で登録できる' do
        @user.password = 'aaa123'
        @user.password_confirmation = @user.password
        expect(@user).to be_valid
      end
    end
中略
   
  end
end

上記のように記述し、ターミナルで

% bundle exec rspec spec/models/user_spec.rb 

コマンドを実行して成功すれば導入できました。

以上がFactoryBotの導入方法です。