具有let和inter依赖模型的Rspec

时间:2015-08-07 07:51:34

标签: ruby-on-rails rspec

我正在使用let for Rspec创建一些依赖模型。

问题是我必须按特定顺序处理很多对象。这是我的代码,请告诉我是否有更好的方法来做事

let(:users) do
 FactoryGirl.create_list(:users, 10)
end 

let(:contacts) do 
  contacts = []
  users.each do |user|
   contacts << FactoryGirl.create_list(:contact, 3, user: user.id)
  end
  contacts 
end

我不喜欢创建联系人的方式,并且想知道是否有更好的方法来使用rspec中的let,FactoryGirl。

1 个答案:

答案 0 :(得分:2)

您可以创建一个特征:with_users,它将构建已经包含联系人的用户:

FactoryGirl.define do
  factory :user do
    name "John Doe"

    factory :with_contacts do
      transient do
        contacts_count 3
      end

      after(:create) do |user, evaluator|
        create_list(:contact, evaluator.contacts_count, user: user)
      end
    end
  end
end

然后在你的测试中:

let(:users) do
 FactoryGirl.create_list(:users, :with_contacts, 10)
end