2017-05-24 61 views
0

我是新来的测试Rails的,我很难测试我的关联。我想简单地为具有各种角色的确认用户提供工厂,我可以在我的规格中创建这些工厂。我想只是有能力user = create(:user_superadmin)user = create(:user_accountadmin),但我很难这样做。来自继承工厂的FactoryGirl协会

下面是运行我的规格时,我遇到了错误:

Failure/Error: user = create(:user_superadmin) 

    NoMethodError: 
     undefined method `name' for :user_superadmin:Symbol 

请参阅下面我的代码:

工厂/ role.rb

FactoryGirl.define do 
    factory :role_superadmin, class: Role do 
    name 'SuperAdmin' 
    description 'Lorem ipsum...' 
    end 
end 

工厂/user.rb

FactoryGirl.define do 
    factory :user do 
    email { Faker::Internet.email } 
    password { Faker::Internet.password(8) } 
    password_confirmation { password } 

    factory :confirmed_user do 
     confirmed_at Time.zone.now 

     factory :user_superadmin do 
     association :role, factory: role_superadmin 
     end 
    end 
    end 
end 

规范

it 'should be a superadmin user' do 
    user = create(:user_superadmin) 
    expect(user.super_admin?).to be_truthy 
end 

任何帮助深表感谢。

回答

1

在你的定义:user_superadmin,试试这个协会:

association :role, factory: :role_superadmin

注意:role_superadmin必须是一个符号,以及因此FactoryGirl可以找到合适的工厂。

+0

omg ... thx这么多。 –

+1

没问题。当我开始使用FactoryGirl时,我发现Arjan van der Gaag提供的这套技巧很有用:http://arjanvandergaag.nl/blog/factory_factor_girl_tips.html –