这是与工厂女孩实现belongs_to关系的正确方法吗?

时间:2013-08-23 16:53:55

标签: ruby-on-rails testing rspec factory-bot

我有一个真正简单的模型。用户拥有一个role_id,它取决于角色表(id,name)和角色引用。

我希望在工厂女孩的rspec测试中创建任何类型的用户。

我的第一个想法是那样的

factory :role do
  name "guest"
  factory :role_admin do
    name "admin"
  end
  factory :role_supervisor do
    name "supervisor"
  end
  etc... I have a lot a different roles
end



factory :user do
  email
  password '123456'
  password_confirmation '123456'
  association :role, factory: :role

  factory :admin do
    association :role, factory: :role_admin
  end
  factory :supervisor do
    association :role, factory: :role_supervisor
  end
  etc... I have a lot a different roles
end

在我的模型中,我有一个简单的方法:

def is(role_name) 
  return self.role.name == role_name
end

这是正确的做法吗?我真的需要为这个角色创建一个工厂吗? 我可以为每个角色在工厂女孩中为这个功能制作一个存根吗?

对于所有测试内容我真的很新,谢谢。

1 个答案:

答案 0 :(得分:0)

工厂应该反映你的模型。

class User
  has_many :products
end

class Product
  belongs_to :user
end

factory :user do
  products
end

factory :product do
end

如果您想要特殊情况(了解您的情况中的角色),您可以定义traits

factory :user do

  traits :admin do
  end

  factory :admin_user, traits: [:admin]

end

有关特征here的更多信息。