Ruby on Rails プログラミング 日記投稿サービスを1から作る

【Rspec入門 #6】FactoryBot導入からデータベース作成まで

 

みやちゃ

 

皆さんこんにちは、みやちゃです!

こちらでRspecのテストの書き方を解説しています!

みなさんはRspecでテストを書いていますか?

その際、FactoryBotを使っていますでしょうか?

FactoryBotを使えば、モデルの作成を1行でできたり、事前に作成できたりします!

今回は
  • FactoryBotとは
  • FactoryBot導入
  • ファクトリを書いて、実際にデータベースを作成
この記事を読むと

FactoryBotを使いこなせるようになります。

FactoryBotとは

テストで作成するデータをより簡単に作成してくれるgemです!

テストファイル内でUserモデルを作成するとなると以下のような記述をする必要がありましたね。

User.create(
  email: "test@test.com",
  password: "testpassword",
)

FactoryBotを導入して、ファクトリのファイルに必要なことを記述すれば、以下のようにするだけで、Userモデルを作成できます。

FactoryBot.create(:user)

上記のように1行記述するだけで、モデルを作成できるようになると、かなり手間が省けます。

FactoryBot導入

それでは、実際にFactoryBotを導入していきましょう。

Gemfileを開いて、以下の記述を追加してください。

developmentとtestのグループの中に記述してください。

group :development, :test do
...他のgemは省略
  gem 'factory_bot_rails', '~> 4.10.0'
end

忘れずに、「bundle install」をしましょう。

次にターミナルを開いて、以下のコマンドを実行してください。

rspec_sample miyacha$ bin/rails g factory_bot:model user

このコマンドを実行すると、specフォルダ内にfactoriesというフォルダが作成されたはずです。

factoriesフォルダの中のuser.rbファイルを開いて見ましょう。

FactoryBot.define do
  factory :user do
    
  end
end

上記のような内容だったはずです。

このfactories/user.rbファイルに、FactoryBotで作成するデータを定義していきます。

Userをファクトリで作成

それではfactories/user.rbファイルを開いてください。

以下の内容にしてください。

FactoryBot.define do
  factory :user do
    email { "test@test.com" } 
    password { "testpassword" }
  end
end

Userを作成するのに必要なカラムのパラメータを与えてあげてます。

これで、データベースを簡単に作成できるようになりました。

テストファイルで実際にUserモデルを作成

それでは実際にUserモデルを作成して見ましょう。

「spec/models/user_spec.rb」ファイルを開いてください。

このテストファイルでFactoryBotを使ってデータベースを作成しましょう。

user_spec.rbのファイルに以下のexampleを追加してください。

require 'rails_helper'

RSpec.describe User, type: :model do
...他のexampleは省略

  it "factorybot test" do
    user = FactoryBot.create(:user)
    expect(user).to be_valid
  end
end

上記のように、FactoryBot.create(:user)とすると、先ほどカラムを記述したモデルを作成できます。

テストの内容としては、

userという関数に、FactoryBotで作成したUserを格納しています。

そして、expectの行で、そのuserがbe_valid(有効である)となるはずであると記述しています。

それでは、テストを実行して見ましょう。

ターミナルを開いて以下のコマンドを実行してください。

rspec_sample miyacha$ bin/rspec spec/models/user_spec.rb

すると以下の実行結果が返って来ました。

Running via Spring preloader in process 14281

User
  is valid with a email and password
  is invalid without an email
  is invalid with a duplicate email address
  factorybot

Finished in 0.11814 seconds (files took 0.83636 seconds to load)
4 examples, 0 failures

7行目を見ると、「factorybot」とテストが成功したことが返って来てますね。

ちなみに上3つの「is valid with a email and password」、「is invalid without an email」、「is invalid with a duplicate email address」は、

こちらの記事でテストを書いていますので、ぜひご覧ください。

まとめ

いかがでしたでしょうか?

今回は、FactoryBotについて解説しました!

 

みやちゃ

 

ここまでご覧いただきありがとうございます!

こちら のUdemyの動画教材は、8時間で、

  • Dockerで仮想環境構築
  • Railsの基礎を解説しながら、アプリケーション開発
  • RSpecでテストを記述

まで解説しています。

Udemyの教材へ

Railsエンジニアとして働くために必要な、DockerとRSpecを同時に解説してくれています。

DockerとRSpecを使って作ったポートフォリオはかなり評価が高くなります。

ぜひ動画を見てみてはいかがでしょうか?

Udemyの教材へ

受講生は、5000人以上!です。

さらに、Udemyは、30日間の返金保証付きなので、いつでも返金できます。

たったの8時間でDocker、Rails、Rspecを学ぶ即戦力Railsエンジニア養成講座

© 2021 みやちゃのブログ Powered by AFFINGER5