みやちゃ
皆さんこんにちは、みやちゃです!
こちらの記事でRspecについて初学者向けに解説していますので、ぜひご覧ください!
- FactoryBot導入
- 複数のデータベースをファクトリに定義
- 実際にテストファイルでデータベースを作成
FactoryBotで複数のデータベースを作成できるようになります!
目次
FactoryBot導入
FactoryBotとは、テスト用のデータベース作成を簡単にできるようにしてくれるありがたいgemです。
まだFactoryBotをインストールしていない方はこちらの記事で解説していますので、インストールしてください。
ファクトリファイルを編集
適切にFactoryBotが導入でき、ファクトリを作成した方はspecフォルダ内にfactoriesというフォルダがあるはずです。(参考:FactoryBot導入)
factoriesフォルダ内のuser.rbファイルを開いてください。
FactoryBot.define do
factory :user do
email { "test@test.com" }
password { "testpassword" }
end
end
user.rbファイルを上記の内容にすると、Userのデータベースが作成されるというのは前回やりました。
では複数のUserを同時に定義し、テストの内容によってUserを使い分けたい時はどうすれば良いのでしょうか?
それではfactoriesフォルダ内のuser.rbファイルを開いてください。
user.rbファイルの中身を以下のようにしてください。
FactoryBot.define do
factory :user do
trait :a do
id { 1 }
email { "email@1.com" }
password { "password1" }
end
trait :b do
id { 2 }
email { "email@2.com" }
password { "password2" }
end
trait :c do
id { 3 }
email { "email@3.com" }
password { "password3" }
end
end
end
コードを見てみると、ファクトリのUserの中に、3つのtraitというグループが入っています。
1つ目はグループに「:a」という名前みたいな物をつけてあげて、その中に、作成するUserのデータベースの内容を書いています。
2つ目、3つ目も同様です。
こうすることで、同時に3つのUserの定義ができ、それをテストファイルで自由に使い分けることができるようになりました。
実際にデータベースを作成
それでは実際にテストファイルでデータベースを作成して見ましょう。
spec/models/user_spec.rbファイルを開き、以下の内容を記述します。
require 'rails_helper'
RSpec.describe User, type: :model do
...他のexampleは省略
it "factorybot 2" do
user = FactoryBot.create(:user, :a)
expect(user.email).to eq "email@1.com"
end
end
テストの内容は見ればわかると思います。
「factorybot 2」という名前のテストで、userという関数にFactoryBotで作成したUserを格納しています。
この時、(:user, :a)とすることで、:a、:b、:cのどのUserを作成するかを指定することができます。
そしてexpectの1行で、user.email(Userのemailカラム)が「"email@1.com"」であるはずだ。としているわけです。
テストを実行して見ましょう。
ターミナルを開いて、以下のコマンドを実行してください。
rspec_sample miyacha$ bin/rspec spec/models/user_spec.rb
実行結果は以下のようになりました。
Running via Spring preloader in process 20671
User
factorybot 2
Finished in 0.11045 seconds (files took 1.08 seconds to load)
1 examples, 0 failures
テストがちゃんと通ったみたいです。
成功ですね。
まとめ
いかがでしたでしょうか?
今回は、FactoryBotで複数のデータベースを作成するやり方を解説しました。
みやちゃ
ここまでご覧いただきありがとうございます!
こちら のUdemyの動画教材は、8時間で、
- Dockerで仮想環境構築
- Railsの基礎を解説しながら、アプリケーション開発
- RSpecでテストを記述
まで解説しています。
Udemyの教材へRailsエンジニアとして働くために必要な、DockerとRSpecを同時に解説してくれています。
DockerとRSpecを使って作ったポートフォリオはかなり評価が高くなります。
ぜひ動画を見てみてはいかがでしょうか?
Udemyの教材へ受講生は、5000人以上!です。
さらに、Udemyは、30日間の返金保証付きなので、いつでも返金できます。