Fabrication
FabricationというのがMongoidのドキュメントに対応しているらしいので、テストの為に使ってみる。
とりあえず、次の事はわかった。
- spec/fabricators/model_fabricator.rb で Fabricator(:model)を作成。
- Fabricate(:model)でモデルを作成し保存。いろいろ試す。
今問題なのは、Fabricator作成時にembed documentをどう記述するか。
Mongoid側のドキュメントにある例が参考になりそうなので、やってみよう。
http://mongoid.org/docs/extensions/
[2010-11-25 追記]
次のような埋め込みドキュメントのモデルを想定する
class Person include Mongoid::Document field :name, :type => String embed_many :phones end class Phone include Mongoid::Document field :number, :type => String embedded_in :person, :inverse_of => :phones end
このときFabricatorはそれぞれこんな感じ。
Fabricator(:person) do name "hogehoge" phones(:count => 3) { |phone,i| Fabricate.build(:phone, :number => "090-0000-000#{i}") } end Fabricator(:phone) do number "03-0000-0000" end
ポイントはPhonesというMongoDBのコレクションが無いため、Fabricate.buildを用いてsaveしないようにする事。
たったこれだけだった。
[2011-01-15 追記]
embeds_manyの場合、上記の例での :count => 3 という部分が無いとエラーになる。
これはおそらく "<<" で挿入してくのではなく "=" で代入するように作用するためだろう。