【问题标题】:Why my Association using Factory Bot is not working?为什么我的使用 Factory Bot 的协会不起作用?
【发布时间】:2020-07-20 11:09:12
【问题描述】:

我正在使用 Factory Bot 来指定两个模型之间的关联,vehiclesdocuments。车辆 has_many 文件和文件 belongs_to 车辆。 它们如下:

#spec/factories/vehicles.rb

    FactoryBot.define do
      factory :vehicle do
        user { nil }
        vehicle_model
        vehicle_color
        vehicle_type { FactoryBot.build(:vehicle_type, name:"Terrestre") }
        vehicle_year
        identifier { 'MyString' }
        status { :active }
        category
    
      end 
    end

#spec/factories/documents.rb
FactoryBot.define do
  factory :document do
    vehicle { nil }
    status { 'valid_file' }
    name { 'CRLV' }
  
  end
end

在这个项目中,我有一个角色 driver,需要一个活动的车辆文档(这是我想要建立的关联)来骑行。 我在要检查的代码点插入了 byebug。首先我检查了车辆是否被激活,所以我输入了:driver.active_vehicle,我收到了:

#

其次,我检查了关联是否正在发生,所以我输入了:driver.active_vehicle.documents,我收到了以下返回:

#<:associations::collectionproxy>

它是空的。为什么会发生这种情况,我该如何解决?

【问题讨论】:

  • OK ...针对您重写的问题,您的documents 关联是空的,因为您没有在工厂中创建任何关联。您应该在 after(:create) 回调中实现您的 with_document 特征来执行此操作。

标签: ruby-on-rails factory-bot


【解决方案1】:

你的工厂不叫vehicles,而是叫vehicle

像这样使用它:

FactoryBot.create(:vehicle, :with_document)

此外,根据您的使用情况,您将 :with_document 特征添加到 document 工厂,而不是 vehicle 工厂。

【讨论】:

  • 感谢您回答我!好吧,我试过了,但我收到了同样的错误:ArgumentError: Factory not registered: vehicle
  • 您是否在修复了您调用的特征之后尝试过它,以便在正确的工厂中定义它?可能值得修复所有问题,然后使用正确的代码和您遇到的任何新错误更新您的问题。在这一点上,我只是在猜测。
  • 我将重新编写问题和代码,这样您可能会更容易思考问题好吗?
猜你喜欢
  • 2012-11-07
  • 2021-07-18
  • 2020-08-15
  • 2020-11-26
  • 1970-01-01
  • 2019-01-06
  • 2023-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多