FactoryGirl创建多个记录

时间:2014-07-04 03:10:15

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

我试图养成编写规范的习惯,然而,这变得越来越令人沮丧。

假设我有两个简单的模型:UserStory。每个模型使用belongs_to关系。每个模型也使用validates :foo_id, presence: true

但是,FactoryGirl正在创建多条记录。

FactoryGirl.define do
  factory :user do
    email "foo@bar.com"
    password "foobarfoobar"
  end # this creates user_id: 1

  factory :story do
    title "this is the title"
    body "this is the body"
    user # this creates user_id: 2
  end
end

这个简单的测试失败了:

require 'rails_helper'

describe Story do

  let(:user) { FactoryGirl.create(:user) }
  let(:story) { FactoryGirl.create(:story) }

  it 'should belong to User' do
    story.user = user
    expect(story.user).to eq(user)
  end
end

我在这里缺少什么?我无法在没有Story的情况下建立User工厂,但我需要它只是一个User记录。

3 个答案:

答案 0 :(得分:8)

您在工厂中为每个属性定义的值仅在您未在createbuild来电中指定值时使用。

user = FactoryGirl.create(:user)
story = FactoryGirl.create(:story, user: user)

答案 1 :(得分:1)

是的,在创建故事时创建关联用户是工厂女孩的一项功能。

你可以这样避免:

require 'rails_helper'

describe Story do
  let(:story) { FactoryGirl.create(:story) }
  let(:user) { story.user }

  it 'should belong to User' do
    story.user.should eq user
  end
end

此示例设置为简单true,但您明白了。

答案 2 :(得分:1)

做这样的事情你可以这样做:

let(:story) { FactoryGirl.create(:story, user: user) }

或者你可以只让故事改变并做:

let(:story) { FactoryGirl.create(:story, user: user) }
let(:user)  { User.last}