暗黙のhas_manyアソシエーションを持つモデルをテストしようとしていますが、いくつかの問題があります。暗黙のhas_manyアソシエーションを持つ工場少女
私はデータベースにテーブルBがないか、またはオブジェクトBに関連付けられているアクティブなレコードクラスを除き、Bが基本的に外部キーであるB_ID列を持つテーブルAを持っています。入札。我々は、テーブルCのためのモデルで
:
# implicit has_many :alphas
def alphas
Alpha.where(:b_id => b_id).order(:xyz)
end
このデータベース構造は、私が持っているデータのために理にかなっていると、非テストコードは正常に動作します。
私のテストコードはほとんど動作しています。私は単純なものが欠けていると思います。
IはAとCのために定義された工場があり、そしてIは、試験有する:
a1 = Factory(:alpha, :b_id => 123, :xyz => 100)
a2 = Factory(:alpha, :b_id => 123, :xyz => 200)
c1 = Factory(:c, :b_id => 123)
puts c1.alphas.count
puts c1.alphas.first
c1.alphas.first.should == a1
出力である:
2
nil
<test fails>
にB_ID結果を共有するオブジェクトの数を変更しますc1.alphas.countは変更されていますが、暗黙的な関連付けの中で実際にAオブジェクトを取得できないようです。代わりに常にnilを取得します。私のCモデルでは、個々のAオブジェクトのフィールドにアクセスする必要があるため、テストできないメソッドがあります。
誰かがここで何が起こっているのか、またこれを回避するために何ができるかについての洞察はありますか?ありがとう。
あなたは 'c1.alphas.class.name'を置くならば、あなたは何を得るのですか? –
@BenLee、ActiveRecord :: Relation – jtabak
ちょうど好奇心から、 'puts c1.alphas.to_a [0]'はレコードを表示しますか? '' puts c1.alphas.limit(1).to_a [0] 'はどうでしょうか?私は、破損が何らかの形で失敗したバックグラウンドの自動ロードにあるかどうか不思議です。 –