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

【Rspec入門#7】FactoryBotで複数のデータベースを一気に作成

 

みやちゃ

 

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

こちらの記事で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日間の返金保証付きなので、いつでも返金できます。

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

© 2024 とあるエンジニアの備忘録ブログ Powered by AFFINGER5