2017-02-14 16 views
2

コントローラとモデルをテストするテストを作成しています。 FactoryGirlを使って偽のデータを作成すると、User(レコードが属する)が存在しないというエラーが発生します。ここで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 '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 
まで持って私のRSpecのテストである

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 

です

今すぐエラーが表示されます:検証に失敗しました:ユーザーは存在する必要があります。Gルックアップが存在する必要があります

私はFactoryGirlを使ってレコードを作成しませんが、すべて正常に動作します。

体には何故失敗しているのかの示唆がありますか?あなたがレコードを作成したいが、それは、初期化の代わりにbuildを使用したくない場合は

+0

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

答えて

0

あなたは

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

をモデル化するためのparamとしてFactoryGirlを渡す必要はありませんcreate

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

ありがとう!これは私の問題を修正しました。それは今実行されています。すべてのテストが合格した – Samuel

関連する問題