фабричная девушка: модель тестирования проблем ассоциации, которая имеет validates_presence_of accepts_nested_attributes_for - PullRequest
1 голос
/ 24 июня 2010

У меня есть простые ассоциации:

class Account < ActiveRecord::Base
  has_many :users

  accepts_nested_attributes_for :users
  validates_presence_of :users
end

и

class User < ActiveRecord::Base
  belongs_to :account
end

Я просто хочу запустить простой тест:

describe 'a new', Account do
  it 'should be valid' do
    Factory.build(:account).should be_valid
  end
end

с фабриками:

Factory.define :account do |a|
  a.name                 { Faker::Company.name }
end

Factory.define :user do |u|
  u.association           :account
  u.email                 { Faker::Internet.email }
end

но я всегда сталкиваюсь с этой ошибкой:

'a new Account should be valid' FAILED
Expected #<Account id: nil, name: "Baumbach, Gerlach and Murray" > to be valid, but it was not
Errors: Users has to be present

хорошо, я установил правильные ассоциации, но это не работает ...

thxза вашу помощь.

1 Ответ

7 голосов
/ 24 июня 2010

validates_presence_of :users в вашей модели Account отвечает за провал теста.Вам нужен как минимум один пользователь в вашей учетной записи, чтобы его можно было создать.

Я не уверен, что вы действительно хотите сделать, поэтому я даю вам два способа решения этой проблемы.Первый вариант - изменить фабрику:

Factory.define :account do |a|
  a.name                 { Faker::Company.name }
  a.users                {|u| [u.association(:user)]}
end

Factory.define :user do |u|
  u.email                 { Faker::Internet.email }
end

Другой способ - проверить наличие ассоциации на принадлежащей стороне.Так что вам нужно изменить свои модели так:

class Account < ActiveRecord::Base
  has_many :users

  accepts_nested_attributes_for :users
end


class User < ActiveRecord::Base
  belongs_to :account
  validates_presence_of :account
end
...