加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用FactoryGirl验证has_many Association至少

发布时间:2020-12-17 04:33:05 所属栏目:百科 来源:网络整理
导读:抛开关于你是否应该测试模型关联存在的论据,我有一个名为Order的模型,我正在验证它在has_many关联中至少有一个项目使用: class Order ActiveRecord::Base has_many :items validates :items,presence: trueend 我已将FactoryGirl设置为lint我的工厂(检查有
抛开关于你是否应该测试模型关联存在的论据,我有一个名为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之前构建项目?叫做.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读