Ruby on rails Rails FactoryGirl-创建特定工厂以满足fk依赖性

Ruby on rails Rails FactoryGirl-创建特定工厂以满足fk依赖性,ruby-on-rails,ruby,ruby-on-rails-4,rspec,factory-bot,Ruby On Rails,Ruby,Ruby On Rails 4,Rspec,Factory Bot,工厂在/Factories/下的多个文件或Factories.rb文件中定义 spec/factories/*.rb spec/factories.rb 模型客户测试需要客户工厂。此工厂有一个外键指向地址工厂 地址工厂在/spec/factories.rb中定义 客户工厂在spec/factories/Customer.rb中定义 现在如果我跑 rspec spec/model/customer_spec.rb 我得到以下错误 postgresql_adapter.rb:602:in `

工厂在
/Factories/
下的多个文件或
Factories.rb
文件中定义

spec/factories/*.rb
spec/factories.rb
模型客户测试需要
客户
工厂。此工厂有一个外键指向
地址
工厂

  • 地址工厂在
    /spec/factories.rb中定义
  • 客户工厂在
    spec/factories/Customer.rb中定义
现在如果我跑

rspec spec/model/customer_spec.rb
我得到以下错误

postgresql_adapter.rb:602:in `exec_prepared': PG::ForeignKeyViolation:
ERROR:  insert or update on table "customers" violates foreign key constraint "fk_rails_580b7e1bd8" (ActiveRecord::InvalidForeignKey)
DETAIL:  Key (address_id)=(1) is not present in table "addresses".
: INSERT INTO "customers" ("date_of_birth", "created_at", "updated_at", , "female_household_members", "male_household_members", "pin_code", "national_id", ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"
FactoryGril尝试首先构建客户工厂,但由于地址表中缺少条目而失败


如何避免这些依赖性问题?我可以先定义一些基本的工厂吗

您是否尝试将
关联:地址
添加到
客户
工厂?如果您显示您的
客户
地址
工厂,会更容易提供帮助。

您是否尝试将
关联:地址
添加到
客户
工厂?如果您显示您的
客户
地址
工厂,则会更容易提供帮助。

我会保持一致性,每个工厂(型号)使用一个文件以实现一致性。不要让别人到处挖

# spec/factories/addresses.rb
FactoryGirl.define do
  factory :address do
    # ...
  end
end

# spec/factories/customers.rb
FactoryGirl.define do
  factory :customer do
    association :address
    # or the short form
    address
  end
end

您所需要做的就是从客户处引用
地址
工厂。和

我真的会保持一致性,每个工厂(模型)使用一个文件来保持一致性。不要让别人到处挖

# spec/factories/addresses.rb
FactoryGirl.define do
  factory :address do
    # ...
  end
end

# spec/factories/customers.rb
FactoryGirl.define do
  factory :customer do
    association :address
    # or the short form
    address
  end
end

您所需要做的就是从客户处引用
地址
工厂。和

是的,当然是这样。我确实设置了fk来修复快速测试的值-。-。。。当然,结果是这样的:)每个工厂一个文件是一个伟大的提示顺便说一句!是的,当然是这样。我确实设置了fk来修复快速测试的值-。-。。。当然,结果是这样的:)每个工厂一个文件是一个伟大的提示顺便说一句!