2017-02-14 9 views
2

Я создаю тест для тестирования контроллера и модели. Когда я использую FactoryGirl для создания поддельных данных, я получаю ошибки, которые пользователь (к которому принадлежит запись) не существует.RSpec error Пользователь должен существовать с 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 roup должен существовать

Когда я не пользователь 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