我正在创建一些测试来测试控制器和模型。当我使用FactoryGirl创建假数据时,我会得到用户(该记录所属的)不存在的错误。
这是我的模型composition.rb
class Composition < ActiveRecord::Base
belongs_to :user
belongs_to :group
validates :name, presence: true, uniqueness: {scope: :user_id}
end
这是我的FactoryGirl文件composition.rb
require 'faker'
FactoryGirl.define do
factory :composition do
name { Faker::Name.name }
description { Faker::Lorem.words }
import_composition { Faker::Boolean.boolean }
import_composition_file { Faker::File.file_name('path/to') }
end
end
到目前为止,这是我的RSpec测试
require 'rails_helper'
describe CompositionsController do
before(:each) do
@user = FactoryGirl.create(:user)
@group = FactoryGirl.create(:group)
sign_in @user
@composition = Composition.new(FactoryGirl.create(:composition), user_id: @user.id, group_id: @group.id)
end
describe "GET #index" do
it "renders the index template" do
get :index
expect(assigns(:composition).to eq(@composition))
expect(response).to render_template("index")
end
end
end
现在我收到一个错误:验证失败:用户必须存在,组必须存在
当我不使用FactoryGirl来创建记录时,一切都很好。
有谁知道为什么会失败吗?
发布于 2017-02-14 01:21:19
您不需要将FactoryGirl作为模型的参数传递
@composition = FactoryGirl.create(:composition, user: @user, group: @group)
如果您不想创建记录,而只是希望它初始化,请使用build
而不是create
@composition = FactoryGirl.build(:composition, user: @user, group: @group)
https://stackoverflow.com/questions/42222049
复制