My Brain is Open.

思いついたことを適当に列列と

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 という部分が無いとエラーになる。
これはおそらく "<<" で挿入してくのではなく "=" で代入するように作用するためだろう。