みやちゃ
皆さんこんにちは、みやちゃです!
こちらで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日間の返金保証付きなので、いつでも返金できます。