我试图养成编写规范的习惯,然而,这变得越来越令人沮丧。
假设我有两个简单的模型:User
和Story
。每个模型使用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
记录。
答案 0 :(得分:8)
您在工厂中为每个属性定义的值仅在您未在create
或build
来电中指定值时使用。
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}