11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails]RSpecでテストを行う準備(FactoryBot使用)

Last updated at Posted at 2021-07-17

今回の記事ではRSpecでテストコードを記述していく前に、いろいろと準備をしていきます。

RSpecに関する他の記事はこちら
[Rails]RSpecでモデルのテスト(FactoryBot使用)
[Rails]RSpecでよく使うマッチャー10選

#開発環境

ruby 2.6.3
Rails 5.2.6

#前提

  • FactoryBot使用
  • Faker使用
  • capybara使用

先にGemの説明を軽くしてから、実際にインストールして準備していきます。

#RSpecとは

Railsにおいて、とてもメジャーなテストフレームワークです。
Gemで導入ができて、コードが読みやすく、ドキュメントも豊富。

Railsで開発を行う現場でもRSpecを使用しているところが多いそうです。

#FactoryBotとは

テストデータの作成をサポートしてくれるGemです。

あらかじめ、テストデータを作っておいて、そのテストデータを使ってテストを実行できるので、テストコードを書く際にいちいちデータを作らなくてもFactoryBotを呼び出すだけで、データが使えるので、コードが簡素になります。

FactoryBotを使用するにはspec/factories/モデル名.rbといった形でファイルを作成し、その中でテストデータを定義します。

postの場合
FactoryBot.define do
  factory :post do
    title { Faker::Lorem.characters(number:5) }
    body { Faker::Lorem.characters(number:20) }
  end
end

これで、postモデルの
titleカラムが5文字のランダム文字列
bodyカラムが20文字のランダム文字列
のデータができました
(Fakerは次に説明します)

カラム名{ 値 }の形で定義します。

で、このデータをFactoryBot.build(:モデル名)の形で記述すると、対象モデルのデータを呼び出せます。

#Fakerとは

先ほどちらっと出てきたFakerはなにかというと、
テスト用のダミーデータを用意してくれるGemです。

# 5文字のランダム文字列
Faker::Lorem.characters(number:5)
# 20文字のランダム文字列
Faker::Lorem.characters(number:20)

こんな感じでダミーデータを作ることができます。

1つずつ見ていくと

Faker::  Fakerを使用する時の宣言
Lorem  ダミーテキストタイプを指定
characters  文字列を作成
number  生成文字数の指定

という構成になっています。

Fakerは使う機会が多いので、覚えておきましょう。

#capybaraとは

テストを実行する際に実際にアプリケーションを操作しているかのようなテストが実行できます。

たとえば
①投稿ページに遷移
②フォームにhogeを入力
③送信ボタンを押す
④送信した後のリダイレクト先が一覧ページである

こんな感じで実際の流れを想定したテストが実行できます。

#Gemfileの編集

軽くGemについての説明が終わったので、Gemを追加していきます。

Gemfileのgroup :test do ~ end部分のデフォルトの記述を削除して下記記述に変更してください。

Gemfile
:
group :test do
  # 中身変更
  gem 'capybara'
  gem 'rspec-rails'
  gem "factory_bot_rails"
  gem 'faker'
end
:

変更できたらbundle installを行ってください

$bundle install

#RSpecの設定

RSpecを使用するために必要なフォルダやファイルをインストールします。

$rails g rspec:install

これでRSpecを使う準備ができました。

#FactoryBotにテストデータを定義

準備編の最後に、FactoryBotにテストデータを定義していきます。
テストデータの定義はご自身のモデル名、カラム名に置き換えて考えてみてください。

##手順
①specフォルダにfactoriesフォルダを作成
②対象モデルのファイルを作成
③テストデータの定義を記述
④あとあとのために設定

####①specフォルダにfactoriesフォルダを作成

RSpecを使う準備はできているのですが、FactoryBot用のファイルがないので、
specフォルダ配下にfactoriesフォルダを作成してください。

####②対象モデルのファイルを作成

次に、ご自身のアプリで使用しているモデルごとのファイルをspec/actories配下に作成してください。

今回は、
user.rb
post.rb
like.rb
comment.rb
contact.rb
を作成します。

####③テストデータの定義を記述

各モデルのファイルができたら、各モデルごとにテストデータを定義していきます。

注意点としては文字数のところで、バリデーションにかからないように定義してください。

email { Faker::Internet.email }で実際のメールアドレスの形でデータを作成できます。(test@example.comみたいな感じ)

association モデル名でアソシエーションも指定できます。
あとあとコントローラーのテストのときにアソシエーションしてると便利なので、つけておいてください。
以下記事参照
FactoryBotのassociationとは

では一気に定義したコードをのせていきます!

spec/user.rb
FactoryBot.define do
  factory :user do
    name { Faker::Lorem.characters(number: 5) }
    # 実際のemailアドレスの形を指定
    email { Faker::Internet.email }
    password { Faker::Lorem.characters(number: 10) }
  end
end
spec/post.rb
FactoryBot.define do
  factory :post do
    # userモデルアソシエーション
    association :user
    image_id { Faker::Lorem.characters(number: 10) }
    content { Faker::Lorem.characters(number: 10) }
  end
end
spec/like.rb
FactoryBot.define do
  factory :like do
    association :user
    association :post
  end
end
spec/comment.rb
FactoryBot.define do
  factory :comment do
    # アソシエーションを定義
    association :post
    association :user
    comment { Faker::Lorem.characters(number: 10) }
  end
end
spec/contact.rb
FactoryBot.define do
  factory :contact do
    name { Faker::Lorem.characters(number: 5) }
    email { Faker::Internet.email }
    content { Faker::Lorem.characters(number: 30) }
  end
end

これでFactoryBotを使ったテストデータを定義できました。
この作ったテストデータを呼び出して、テストを行っていきます。

####④あとあとのために設定

あとあとのコントローラーテスト時にletを使用したときに、FactoryBotが使用できるように設定しておきます。

spec/rails_helper.rbの1番下のendの手前に以下を記述してください。

spec/rails_helper.rb
:
  # letを使用したときに、FactoryBotが使用できるように設定
  config.include FactoryBot::Syntax::Methods
# endより上
end

以上でRSpecでテストを行う前の準備が完了です!

#まとめ

####RSpecの準備は

  • Gemfileの編集
  • RSpecインストール

####FactoryBotにテストデータを定義する手順は

①specフォルダにfactoriesフォルダを作成
②対象モデルのファイルを作成
③テストデータの定義を記述
④あとあとのために設定

今回の記事でRSpecでテストをする準備が完了したので、他記事で実際にテストコードを書いていきます。
RSpecに関する他の記事はこちら
[Rails]RSpecでモデルのテスト(FactoryBot使用)
[Rails]RSpecでよく使うマッチャー10選

はじめてRSpecを使う方、ひさびさにRSpecを使う方の参考になれば幸いです。

11
8
2

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
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?