测试 用 FactoryGirl 构建数据的一个问题

tsinghan · 2013年12月15日 · 最后由 TsingHan 回复于 2013年12月16日 · 2460 次阅读

RT,例如有如下两个 factories,

FactoryGirl.define do
  factory :user do
    name "user"
    password '1234abcdsd'
    password_confirmation '1234abcdsd'
    sequence(:email) { |n| "hanqing#{n}@example.com"}
    phone 12345678
    association :company, :factory => :company
  end
end
FactoryGirl.define do
  factory :account do
    name "account"
    association :company, :factory => :company
  end
end

我在 user 和 account 里面都关联了 company,当我在测试代码里面

@user  = create(:user
 post :create, content: {content: "aaa", id: create(:account)}

create(:user) 的时候,company 会插入到数据库,当我再 create(:account) 这时候 company 还会插入到数据库,因为我的 company 有验证,所以就报错了,像这种情况该如何解决?还是我构建的数据方式有问题?

你需要创建用户的时候自动创建关联的公司才需要在 Factory 里面设置关联,按你的情况不需要设置。

另外 company factory 没写好,自动创建也应该不会抛错。

#2 楼 @Rei

FactoryGirl.define do
  factory :company do
    name 'compamy'
    tel '123485876'
    address 'aaa'
  end
en

company 是这样写的 因为我在 model 里面定义了 validates_uniqueness_of :name 所以两次自动创建时候 就报错了

#3 楼 @TsingHan

sequence(:name) { |n| "company#{n}"}

#4 楼 @Rei 对,sequence 就是干这个用的,忘了,多谢

关联的地方直接写即可

require 'faker'

FactoryGirl.define do
  factory :company do
    name { Faker::Company.name }
  end
end

FactoryGirl.define do
  factory :user do
    name { Faker::Internet.user_name }
    company
  end
end
需要 登录 后方可回复, 如果你还没有账号请 注册新账号