2017-02-14 36 views
2

我正在创建一些测试来测试控制器和模型。当我使用FactoryGirl创建假数据时,我收到用户(记录属于)不存在的错误。RSpec错误用户必须存在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 

现在我收到一个错误:验证失败:用户必须存在,G群必须存在

当我不使用FactoryGirl创建记录一切工作正常。

有没有任何机构有建议,为什么它失败?

+0

'''@composition = FactoryGirl.create(:composition,user_id:@ user.id,group_id:@ group.id)''' – cutalion

回答

0

你并不需要通过FactoryGirl作为一个参数去建模

@composition = FactoryGirl.create(:composition, user: @user, group: @group) 

如果你不想创建记录,但只是希望它的初始化,使用build代替create

@composition = FactoryGirl.build(:composition, user: @user, group: @group) 
+0

谢谢!这解决了我的问题。它现在正在运行。所有测试都已通过 – Samuel

相关问题