Factorygirl Admin Creation

我正在关注Michael Hartl的在线教程,在代码清单9.42中,我无法理解代码。

FactoryGirl.define do factory :user do sequence(:name) { |n| "Person #{n}" } sequence(:email) { |n| "person_#{n}@example.com"} password "foobar" password_confirmation "foobar" factory :admin do admin true end end end 

然后在清单9.43中创建管理员

  describe "as an admin user" do let(:admin) { FactoryGirl.create(:admin) } 

我不明白的是如何创建一个没有任何代码的管理员

  sequence(:name) { |n| "Person #{n}" } sequence(:email) { |n| "person_#{n}@example.com"} password "foobar" password_confirmation "foobar" 

在管理区内?

似乎:管理块嵌套在:用户块中,因此:用户块代码在FactoryGirl.create(:admin)期间执行,在:user块内创建一个用户名,电子邮件,密码的管理员?

是对的吗? 谢谢!

假设您已经知道FactoryGirl库的工作原理 ,那么您的问题的解释是:admin工厂在:user工厂中定义

 FactoryGirl.define do factory :user do ... factory :admin do admin true end end end 

在这种情况下, :admin将inheritance用户的所有属性,以及特定的admin: true设置。

 FactoryGirl.create(:admin) 

对,那是正确的。 创建嵌套的FactoryGirl对象时,该对象将inheritance其父对象的所有属性。