Factory_girl create дает ошибку проверки

Я пытаюсь проверить действие destroy в приложении rails. Я использую Factory_girl для создания объектов. При создании объекта компании обязательно добавлять отношение пользователя. Но я получаю неудачу, когда пытаюсь создать компанию с Factory_girl.

user_spec.rb

describe User do

 before(:each) { @user = User.new(email: '[removed_email]') }

 subject { @user }

 it { should respond_to(:email) }
 it { should respond_to(:companies) }

 it "#email returns a string" do
 expect(@user.email).to match '[removed_email]'
 end

 describe "company associations" do 
 let!(:a_company) do
 FactoryGirl.create(:company, user: @user)
 end

 it {should have_many :companies, :dependent => :destroy}
 end

end

factory.rb

FactoryGirl.define do
 factory :user do
 confirmed_at Time.now
 name "Test User"
 email "[removed_email]"
 password "please123"

 trait :admin do
 role 'admin'
 end
 end 
 factory :company do
 name "Total Inc."
 user :user 
 end
end

модель /user.rb

class User < ActiveRecord::Base
 has_many :companies, dependent: :destroy
 enum role: [:user, :vip, :admin]
 after_initialize :set_default_role, :if => :new_record?

 def set_default_role
 self.role ||= :user
 end

 # Include default devise modules. Others available are:
 # :confirmable, :lockable, :timeoutable and :omniauthable
 devise :invitable, :database_authenticatable, :registerable, :confirmable,
 :recoverable, :rememberable, :trackable, :validatable
end

модель /company.rb

class Company < ActiveRecord::Base
 belongs_to :user
 validates :user_id, presence: true
end

Ошибка, которую я получаю:

Неудачи:

1) User company associations
 Failure/Error: FactoryGirl.create(:company, user: @user)
 ActiveRecord::RecordInvalid:
 Validation failed: User can't be blank

РЕДАКТИРОВАТЬ

Я следил за советом снизу и теперь могу создать, но получить следующую ошибку:

Failure/Error: it {should have_many :companies, :dependent => :destroy} expected #<user:0x007fc7b7ce08c0> to respond to has_many?
</user:0x007fc7b7ce08c0>
1 ответ

Первая ошибка Ошибка Validation failed: User can't be blank, это результат не сохранения объекта @user. Вы можете исправить ошибку, сохранив объект перед вызовом create:

let!(:a_company) do
 @user.save
 FactoryGirl.create(:company, user: @user)
end

Вторая ошибка, Failure/Error: it {should have_many :companies, :dependent => :destroy} expected #<user:0x007fc7b7ce08c0> to respond to has_many?</user:0x007fc7b7ce08c0> это ошибка тестирования - производственный код работает нормально. Чтобы исправить тест, попробуйте один из следующих вариантов:

Использовать Shoulda

it {should have_many(:companies).dependent(:destroy)}

Использовать FactoryGirl

it 'Expects user to have many companies' do
 expect{@user.companies}.to_not raise_error
end

licensed under cc by-sa 3.0 with attribution.