読者です 読者をやめる 読者になる 読者になる

@Konboi memo

主に技術に関してつらつらと。

test用のデータをどうするか

ruby 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

いつまで続くのかゆる〜く続けていこうと思います。


The RSpec Book (Professional Ruby Series)
David Chelimsky Dave Astels Zach Dennis
翔泳社
売り上げランキング: 34,585