默认情况下,FactoryGirl会调用关联的工厂来创建它们。我可以将工厂的关联作为参数传递。但是,如何传递一个应该在关联链中深入使用的对象?
例如:
我有一个Post,它有一个PostsManager,它有一个Account,属于current_user。
当我执行Factory(:post)
时,它会创建一个PostsManager,它创建一个不属于(存根)current_user的帐户。
因此,在使用Post工厂的规范中,我必须这样做:
account = Factory(:account, user: current_user)
post_manager = Factory(:post_manager, account: account)
post = Factory(:post, post_manager: post_manager)
我想做的是使用Factory(:post, user: current_user)
调用工厂,然后将current_user
一直通过关联传递到帐户工厂。有没有办法这样做?
答案 0 :(得分:23)
不确定您使用的是什么版本的FactoryGirl,但如果您使用的是最新版本(2.6+),则可以使用瞬态属性(在"Getting Started" page上阅读更多内容)。你可以这样做:
FactoryGirl.define do
factory :post do
ignore do
user nil
end
posts_manager { FactoryGirl.build(:posts_manager, :user => user) }
end
factory :posts_manager do
ignore do
user nil
end
account { FactoryGirl.build(:account, :user => user) }
end
factory :account do
user { user }
end
end
FactoryGirl.create(:post, :user => current_user)