2011-06-20 5 views
0
setup do 
    @user = Factory.build(:user) 
    end 

私の単体テストの最上部には、上記があります。Ruby on Rails 2.3.8:Factory_girl:グローバル変数は工場ビルド全体で価値を維持しませんか?

そして、私のユニットテストでは、私はFactory.build(:object)

を行うが、工場itsselfで、それは私の工場NoMethodError: undefined method my_attribute for nil:NilClass

を言っている:

Factory.define :object |o| do 
    o.my_attribute @user.my_attribute 
end 

が、@userがnil = \

です
+0

私はそこに工場が必要な理由を理解できません。 – apneadiving

+0

それは例です、私はオブジェクトと呼ばれるオブジェクトを使用せず、すべての私の工場は少なくとも6行です。 = p – NullVoxPopuli

答えて

1

@userはグローバル変数ではありません。 インスタンス変数です。この場合、@userはテストスイートのインスタンス変数です。 Factory.defineに渡されたdo...endブロックは、テストスイートのコンテキスト内で実行されないため、異なるselfと異なるインスタンス変数を持ちます。代わりに、属性値を工場に渡す必要があります。

setup do 
    @user = Factory.build(:user) 
    Factory.build(:object, :my_attribute => @user.my_attribute) 
end 
+0

@@ userと同じ問題が発生する – NullVoxPopuli

関連する問題