0
我在我的Article工厂收到以下测试失败,该工厂has_many通过:,validates_presence_of与我的类别模型关系。类别需要在文章创建之前存在,所以我设置了一个before(:create),create_list钩子来创建和关联一些类别与正在创建的文章,但是我收到了下面的失败。我也尝试使用协会(例如关联:类别,工厂::类别),但基于我读过的,我的模型具有的关系(have_many:through),要求我使用before(:create )挂钩。我错过了什么?FactoryGirl:has_many:through,validates_presence_of:关联错误:不能为空?
Failures:
1) Factory Girl article factory is valid
**Failure/Error: expect(factory).to be_valid, lambda { factory.errors.full_messages.join("\n") }
Categories can't be blank**
# ./spec/support/factories_spec.rb:17:in `block (4 levels) in <top (required)>'
模式
class User < ActiveRecord::Base
...
has_many :articles
...
end
class Article < ActiveRecord::Base
belongs_to :user
has_many :article_categories
has_many :categories, through: :article_categories
validates_presence_of :categories
...
end
class Category < ActiveRecord::Base
has_many :article_categories
has_many :articles, through: :article_categories
...
end
class ArticleCategory < ActiveRecord::Base
attr_accessor :article_id, :category_id
belongs_to :article
belongs_to :category
end
工厂
FactoryGirl.define do
factory :user do
name { Faker::Name.name }
email { Faker::Internet.email }
password '[email protected]'
password_confirmation '[email protected]'
user_name { Faker.bothify('??????????###') }
after(:create) do |user, evaluator|
create_list(:article, rand(1..3), user: user)
end
end
end
FactoryGirl.define do
factory :article do
title { Faker::Lorem.paragraph[0..(rand(11..63))] }
content { Faker::Lorem.paragraph[0..(rand(150..5000))] }
before(:create) do |article, evaluator|
create_list(:category, rand(1..3), article: article)
end
end
end
FactoryGirl.define do
factory :category do
name { Faker::Lorem.characters(10) }
end
end
FactoryGirl.define do
factory :article_category do
end
end
没有。 Saame错误。 – gangelo 2014-09-30 14:36:55
啊,也许'before(:create)'在验证发生后运行*。我修改了上面的答案。现在有什么运气? – Ben 2014-09-30 16:47:26
这样做;没有办法使用之前使用(:xxx)?如果我想使用瞬态属性怎么办?非常感谢:) – gangelo 2014-09-30 17:15:27