Moingoid は、テスト中に埋め込み関係を永続的に設定していないようです。私のユーザーモデルには次のものがあります。
def vote_on(請求書、値) my_groups = self.groups の場合 my_groups.each do |g| bill.votes.create(:value => value, :user_id => self.id, :group_id => g.id) # ファクトリのみの結果: bill.votes.first.group = nil # and bill.votes.first.user = nil !! # self.id と g.id はテスト中に良い値を持っていますが、持続していません 終わり そうしないと raise "このユーザーのグループはありません" # #{self.full_name}" 終わり 終わり
その他の役立つコードは次のとおりです。
##請求書モデル クラスビル embeds_many :votes ## 投票モデル クラス投票 インクルード Mongoid::Document field :value, :type => Symbol # は :aye, :nay, :abstain #field :group_type, :type => 整数 所属先:ユーザー 所属先:グループ embedded_in :請求書 終わり ## テスト 「説明的な集計が機能するはず」をテストします user1 = Factory.build(:user) b = Factory.build(:ビル) user1.vote_on(b, :aye) # ここで作成された nil 値! タリー = b.descriptive_tally assert_not_nil タリー 終わり ##ビルファクトリー Factory.define :bill do |f| f.bill_html "ただの事実" ... f.state「紹介済み」 f.text_updated_on DateTime.parse("2011-06-16 00:00:00 Z") f.text_word_count 2356 賛成票 終わり ## ユーザーファクトリー Factory.define :user do |u| u.email 'user@domain.com' u.name「ユーザー」 u.roles_mask 1 u.パスワード「シークレット」 u.password_confirmation「秘密」 u.groups {[Factory.build(:group, {:name => 'foreign', :type => :custom})]} 終わり
これは私にとって本当に頭が痛いです。おそらくこれは、よりよく調査して送信する必要があるバグです。私の最初の推測は、工場やテストのセットアップで単純なものが欠けているということです。このコードは開発時にうまく機能します。どんな助けでも大歓迎です。