test用のデータをどうするか
はじめに
最近新しいプロジェクトがスタートしました。
設計はほぼほぼ終わりました。そこまで規模は大きくありません。
今、悩んでいるのがtest時のデータをどうするか。
- テスト前に
rake db:seed RAILS_ENV=test
を実行して事前に適度なダミーデータを入れるべきか。 - テストする項目ごとにデータをつくるべきなのか。
ある程度本番環境で動かしたものなら dumpしたものをtest前に流し込むとかができると思いますが、0からのプロジェクトなので残念ながらそうはいかないです。
で、自分はというと前者のやりかたでで行っています。
どんな感じでやってるの?
spec/spec_helper.rb
の下部に
system("rake db:seed RAILS_ENV=test")
を記述して、test を実行するまえに rake db:seed
でデータを生成しています。
db/seed.rb
を
table_names = %w(categories users) table_names.each do |table_name| p table_name path = "#{Rails.root}/db/seeds/#{Rails.env}/#{table_name}.rb" require(path) if File.exist?(path) end
として、modelが追加される度に
db/seeds/test, db/seeds/development ,db/seeds/production 以下にそれぞれ必要があれば #{model_name}.rb ファイルを追加して必要な処理を記述しています。
サンプル
参考にならないと思いますが、こんな感じでやってるという例をのっけときたいと思います。
seeds/test/users.rb
while 50 > User.all.length do user = User.create( user_name: AppUtil.dummy_user_name, ) end
lib/app_util.rb
module AppUtil def self.dummy_user_name(limit=nil) length = limit ? limit : 10 random_string(length) end def self.random_string(limit) [*1..9, *'A'..'Z', *'a'..'z'].sample(limit).join end end
こんな感じで lib/ 以下に utility ファイルにこんな感じで便利メソッド?を定義して ダミーデータを適度につくってます。
結局
自分の場合は、上記で述べた感じでテストデータをつくって、
特殊な例など必要なときに都度必要なデータをつくってテストしてます。
どういうやり方がベストプラクティスなんだろうか?
ツッコミお待ちしております。
最後に
会社の同僚の人たちが
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
に感化されBlogを書き始めるということなので、自分もそれにのっかって書こうと書き始めましたw
いつまで続くのかゆる〜く続けていこうと思います。