##seeds.rbとは
Webアプリの初期データを作ってくれるファイル
この中にテストデータを記述しておくことで、
Webアプリの__動作確認__や__レイアウト修正必要箇所の発見__などができるようになります。
##書き方
####1つずつテストデータを書いていく場合
#1つずつテストデータを追加する場合
Product.create!(
name: "チーズ入りクッキー(6枚入り)",
description: "チーズクッキーは生地となるラングドシャだけでなく、間にサンドしたホワイトチョコにもチーズが入っています。ダイレクトにチーズの美味しさを感じられるのでチーズ好きにはたまらないクッキーです",
ex_price: "700",
image: File.open("./app/assets/images/demo_product_image/クッキー.jpg")
)
`モデル名.create!`から始まり、 `カラム名: "値" `を必要数書くことでテストデータが作成できるようになります。
※画像データは
カラム名: File.open("ファイルの保存場所/ファイル名")
で登録可能です。
今回はapp/assetsにimagesディレクトリを作成し、
さらにその中に、demo_product_imageディレクトリを作成。
その中にファイルを保存していた為、このような書き方になっています。
####大量のテストデータを入れたい場合
例えば、100個のテストデータを作りたいときはどうしましょう。
上記方法で100個書いてもいいですが、時間がもったいないですよね。
そのようなときは、__繰り返し処理__でデモデータを作ることができます!
100.times do |n|
User.create!(
name: "test#{n + 1}人目",
content: "test#{n + 1}回目",
email: "test{n + 1}@test.com",
password: "password"
)
end
この記述では、 0~100までの値をブロック変数 __n__ に代入してテストデータを作ります。
テスト1人目
テスト2人目
テスト3人目
テスト4人目
・
・
・
と100回繰り返し処理を行い、データを作ることができます。
##seeds.rbの反映
seeds.rbを書いただけではテストデータは登録されません。
rails db:seed
このコマンドでseeds.rbを読み込みます。
※注意
テストデータの読み込みをリセットするコマンド
bin/rails db:migrate:reset
seeds.rb
を読み込んで実装中、途中からテストデータを増やしたとします。
再度rails db:seed
で読み込むとエラーになります。(重複するデータが出てきてしまう)
そのため、途中でテストデータを増やした際には、上記コマンドで一度テストデータの読み込みをリセットしてから再読み込みを行ってください。
##おまけ
####create と create!
どちらでもテストデータの作成を行うことはできます。
しかし、create
ではバリデーション通りに作らなかった時にテストデータを作ることができません。
様々なカラムにバリデーションを定義していることも想定して、create!
を使った方が楽だと思われます。
####それっぽいテストデータを作ってくれるGem
テストデータがtest1、test2、test3では味気ないという方へ
1:fakerというGemを読み込む
gem 'faker'
bundle install
ついつい忘れがち(Gem読み込み)
2:seeds.rbにfakerを使ってテストデータを書く
100.times do |n|
name = Faker::Name.name
content = "test"
email = Faker::Internet.email
password = "password"
User.create(
name: name,
content: content,
email: email
)
end
3:seeds.rbの読み込み
rails db:seed
これでそれっぽい名前とアドレスのテストデータができます。
faker
をより詳しく知りたい方はこちらを参考にしてください!
公式リファレンス
##さいごに
文字の長さなどによってレイアウトの調整もしやすくなるので、文字の長さを変えたテストデータを複数作ってみても良いかもしれません。
誤字、脱字、知識の誤り等ありましたら、教えていただけると幸いです。