ruby-on-rails – 使用FactoryGirl验证has_many Association至少有一个模型

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用FactoryGirl验证has_many Association至少有一个模型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
抛开关于你是否应该测试模型关联存在的论据,我有一个名为Order的模型,我正在验证它在has_many关联中至少有一个项目使用:
class Order < ActiveRecord::Base

  has_many :items

  validates :items,presence: true

end

我已将FactoryGirl设置为lint我的工厂(检查有效性).所以除非我为has_many集合创建一个项目,否则我的订单工厂无效.

我的订单工厂看起来像这样:

FactoryGirl.define do

  factory :order do

    ignore do
      items_count 1
    end

    after(:build) do |order,evaluator|
      create_list(:item,evaluator.items_count,order: order)
    end

  end
end

根据Factory Girl的入门指南:

FactoryGirl.lint builds each factory and subsequently calls #valid? on it

但是,当我运行我的规范时,Factory Girl会抛出FactoryGirl :: InvalidFactoryError,因为订单工厂无效.

解决方法

after(:build) do |order,evaluator|
   evaluator.items_count.times do
     order.items << FactoryGirl.create(:item)
   end
   #create_list(:item,order: order)
 end

解决方法

根据定义,它会调用.valid?建成后.它似乎会在运行after(:build)块之前调用它.

试着像这样写你的工厂:

FactoryGirl.define do

  factory :order do

    ignore do
      items_count 1
    end

    items { build_list(:item,items_count) }

  end
end

这应该在.valid之前构建项目?叫做.

让我知道这个是否奏效 :)

猜你在找的Ruby相关文章