Herokuに上げているRailsアプリのDBは、最近MongoDBをよく使っている。 MongoHQ、MongoLabなどが500MBの無料プランを提供しているからで、 個人アプリであればこのくらいあれば十分だからだ。

それでMongoDBのテストデータをRailsで作りたくて探してみたところ、 Fabricationというgemがよさげだった。

http://www.fabricationgem.org

Personというモデルクラスがあるとして、テストデータは以下のように作る。

app/models/person.rb

class Person
  include Mongoid::Document
  field :name, String
end

定義ファイルは以下のようなパスに置くと自動で読み込まれる。 test_or_spec/fabricators/*/*_fabricator.rb

例ではこちら。 test/fabricators/person/person_fabricator.rb

Fabricator(:person) do
  name 'Tarou'
end

name属性に対してnameというメソッドが定義されているので、セットする値を渡す。

テストケースからは以下のように呼び出す。 test/models/person_test.rb

@person = Fabricate(:person)

便利な機能としては、Fabricatorの定義を継承して新たな定義を作ったり、 属性値をセットする際にブロックをとれたりする。

手軽にテストデータを作るには便利なライブラリだと思う。