继承工厂的FactoryGirl协会

FactoryGirl association from inherited factory

我是 Rails 中的测试新手,并且在测试我的关联时遇到很大困难。我只想为已确认的用户提供工厂,这些用户具有我可以在我的规范中创建的各种角色。我只想拥有 user = create(:user_superadmin)user = create(:user_accountadmin) 的能力,但我很难做到。

以下是我在 运行 我的规格时遇到的错误:

Failure/Error: user = create(:user_superadmin)

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

请看下面我的代码:

factories/role.rb

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

factories/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

非常感谢任何帮助。

在您的定义中:user_superadmin,试试这个关联:

association :role, factory: :role_superadmin

注意 :role_superadmin 也必须是一个符号,这样 FactoryGirl 才能找到合适的工厂。