如何使用FactoryGirl

时间:2015-12-02 09:33:34

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

为了举例,我有一个化学元素模型

class Element < ActiveRecord::Base
  validates :name, presence: true, uniqueness: true
  validates :symbol, presence: true, uniqueness: true 
end

seeds.rb中我定义了所有已知元素

Element.where(name: "hydrogen" symbol: "H").first_or_create
...
Element.where(name: "ununoctium" symbol: "Uuo").first_or_create

我定义了一个工厂

FactoryGirl.define do
  factory :element do
    name "hydrogen" 
    symbol "H"
  end
end

由于代码库依赖于所有种子元素的存在,我使用

准备测试数据库
rake db:seed RAILS_ENV=test

现在我的工厂永远不会工作

FactoryGirl.create(:element) #=> validation failed error

如何以首先尝试在数据库中查找可创建对象的方式编写工厂?

FactoryGirl.create(:element) #=> returns Element from db || Factory invocation  

1 个答案:

答案 0 :(得分:0)

为什么不这样做:

element = Element.find_by(name: "hydrogen") || FactoryGirl.create(:element, name: "hydrogen", symbol: "H")