テストコードを書くときに、ランダムで情報を生成したい


【概要】

1.結論

2.導入方法

3.ニックネーム,email,パスワードの書き方

4.別の書き方

補足:日付/苗字・名前(漢字とカタカナ)の書き方


1.結論

gem”faker"をgemfileに記載し、bundle installする。
そして、specフォルダにfactoriesフォルダを作り記載したいファイルを作ってプログラミングする。

2.導入方法

※ここではgem"rspec-rails",gem"factory_bot_rails"の導入の話は割愛します!その2つをbundle installしている前提でお話しします。"Rspec","FactoryBot"の記事を投稿した場合はこちらにもリンクを貼らせていただきます!


手順❶

gemfileフォルダ
group :development, :test do
end 

の中に

gem 'faker'

を記載。



手順❷

ターミナル
bundle install 

ターミナルでこのように記述します。


手順❸
specフォルダにfactoriesフォルダを生成し、
任意のファイルを作成。(Rubyであれば"モデル名.rb")


手順❹

factories/***.rb
FactoryBot.define do
  factory :user do
------- ここより下に記載していきます------------


 end
end


3.ニックネーム,emailの書き方

----- ここより下に記載していきます--------

の欄に

factories/***.rb
nickname { Faker::Name.name }
email { Faker::Internet.free_email }

と記載することでランダムに生成することができます!
nickname,emailはDBのカラムと同じ名前になります。


3.パスワードの書き方

factories/***.rb
password = Faker::Internet.password(min_length: 6)
password { password }
password_confirmation { password }

min_length:6はgem"devise"の本来備わっているバリデーションに合わせています。
また2度入力するための"確認用パスワード"も記載しています。

4.生成されているか確認する方法

ターミナルで

ターミナル
%rails c

とコンソールを開いてから

コンソール
pry(main)>FactoryBot.create(:モデル名)

*pryなのはbinding.pryを導入しているためです。

下記のように入力するとニックネーム,emailの情報がランダムで生成されていることがわかります!
*パスワードはencrypted_passwordにより暗号化されます。

コンソール
nickname: "Sen. Lou Schimmel", email: "[email protected]"


4.別の書き方

gem"faker"を導入しないパターンですと、
このように書くこともできます!

factories/***.rb
FactoryBot.define do
  factory :user do

  nickname              {"taro"}
  email                 {"[email protected]"}
end
end


補足.日付/苗字・名前(漢字とカタカナ)の書き方

結論から申しますと、

factories/***.rb
FactoryBot.define do
  factory :user do
    transient do
      person { Gimei.name }
   end
   date { Faker::Date.backward }
   first_name { person.first.kanji }
   last_name { person.last.kanji }
   first_name_kana { person.first.katakana }
   last_name_kana { person.last.katakana }
 end
end

このように書きます。
ただ注意して欲しい事が1点あります。
gem"faker"にはランダムで漢字やカタカナ(振り仮名)を生成することができないので別途gem"gimei"というものをgemfileに記載し、bandle installします。

そして

factories/***.rb
transient do
person { Gimei.name }

こうすることによりgemを自由に使用することができます。

実際に使用する際は
”person.”をいれて苗字と名前(”first”/”last”)で指定することができ、漢字とカタカナ(”kanji”/”katakana”)で指定できます。