Rails FactoryGirl序列 - 测试创建的对象

时间:2016-03-30 07:57:29

标签: ruby-on-rails ruby-on-rails-4 factory-bot

我使用如下的序列

 sequence (:role_id){|n| "10#{n}" }

现在我用

创建一个工厂
 FactoryGirl.create :account, name: "name", phone:"1234", role_id: FactoryGirl.generate(:role_id)

如何测试生成的role_id值?

 expect(account.role_id).to eq ?

2 个答案:

答案 0 :(得分:1)

你不应该这样做。序列用于生成唯一的随机数据。 如果您想在模型上建立role关联,请在工厂中考虑以下内容:

FactoryGirl.define do
  factory :person do
    role

    sequence(:email) { |n| "email-#{n}@example.com" }
    phone SecureRandom.uuid
  end
 end

答案 1 :(得分:1)

我不确定我是否遵循了如何使用测序。

传统方式在您的工厂

FactoryGirl.define do
  factory :account do
     name { "whatever" } 
     sequence(:role_id){ |i| "10#{i}"}
     phone{ "5555" }
  end
end

然后您可以生成如下帐户:

account = FactoryGirl.create :account, name: "name", phone:"1234"

它将使用您提供的内容覆盖每个传递的参数。

您还可以指定:role_id

account = FactoryGirl.create :account, name: "name", phone:"1234", :role_id => "1015"

现在,您可以测试任何您想要的值。例如,使用RSpec:

account = FactoryGirl.create :account, name: "name", phone:"1234"
expect(account.role_id).to eq "1001".

但是没有意义,因为你在这里测试的是FactoryGirl。这已经过测试。 :)