Rails и FactoryBot - невозможно запустить модель пользователя, ActiveRecord :: RecordInvalid - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь внедрить модели FactoryBot в мои тесты Rspe c. Эти модели выглядят так:

FactoryBot.define do
  factory :user do
    first_name { "MyString" }
    last_name { "MyString" }
    inbox 
    outbox 
  end
end

FactoryBot.define do
  factory :outbox do
    user_id { 1 }
  end
  factory :inbox do
    user_id { 1 }
  end
end

И когда я вызываю «Patient = Create (: user)» в моем тесте Rspe c, я получаю эту ошибку:

 Failure/Error: patient = create(:user)     
 ActiveRecord::RecordInvalid:
 Validation failed: User must exist

Чтобы обеспечить более широкое представление, вот мои модели:

class User < ApplicationRecord

  has_one :inbox
  has_one :outbox
  has_many :payments
  has_many :messages

end

class Inbox < ApplicationRecord

  belongs_to :user
  has_many :messages

end

class Outbox < ApplicationRecord

  belongs_to :user
  has_many :messages

end

и относительно части schema.rb:

  create_table "users", force: :cascade do |t|
    t.boolean  "is_patient", default: true
    t.boolean  "is_doctor",  default: false
    t.boolean  "is_admin",   default: false
    t.string   "first_name"
    t.string   "last_name"
    t.datetime "created_at",                 null: false
    t.datetime "updated_at",                 null: false
  end

  create_table "outboxes", force: :cascade do |t|
    t.integer "user_id"
    t.index ["user_id"], name: "index_outboxes_on_user_id"
  end

  create_table "inboxes", force: :cascade do |t|
    t.integer "user_id"
    t.index ["user_id"], name: "index_inboxes_on_user_id"
  end

Что я делаю не так здесь, этот пользователь в FactoryBot не может пройти проверку?

1 Ответ

2 голосов
/ 05 марта 2020

Попробуйте использовать after(:build)

factory :user do
  first_name { "MyString" }
  last_name { "MyString" }

  after(:build) do |user|
    user.inbox = create(:inbox, user: user)
    user.outbox = create(:outbox, user: user)
  end
end

Надеюсь, это поможет!

...