1

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})]}
終わり

これは私にとって本当に頭が痛いです。おそらくこれは、よりよく調査して送信する必要があるバグです。私の最初の推測は、工場やテストのセットアップで単純なものが欠けているということです。このコードは開発時にうまく機能します。どんな助けでも大歓迎です。

4

1 に答える 1

5

ほとんどの factory gem と Mongoid には問題があると思います。Factory GirlとMachinistの両方を使用しようとすると、多くの問題が発生したことを思い出したようです.

ファブリケーションは、Mongoid を使用したテストでオブジェクト生成を行うための現在推奨されている標準のようです。すべての Mongoid プロジェクトで完璧に機能しています。

于 2011-06-23T06:01:09.967 に答える