Я пишу тесты для своих моделей и столкнулся с ошибкой, которую не могу устранить.Я использую rspec и Fabricator.Все работает нормально, когда тестируется изолированно, но когда я пытаюсь проверить ассоциации, я получаю ActiveModel :: MissingAttributeError.
models / user.rb
class User < ApplicationRecord
...
validates :email, uniqueness: true, presence: true
belongs_to :company, required: false
end
модели / company.rb
class Company < ApplicationRecord
validates :organisation_number, uniqueness: true, presence: true
has_many :users, dependent: :destroy
end
схема
create_table "companies", force: :cascade do |t|
t.string "organisation_number"
...
end
create_table "users", id: :serial, force: :cascade do |t|
t.string "email", default: "", null: false
...
t.bigint "company_id"
t.index ["company_id"], name: "index_users_on_company_id"
...
end
fabricators / user_fabricator.rb
Fabricator :user do
email { Faker::Internet.email }
password '123456'
confirmed_at Time.now
end
fabricators / company_fabricator.rb
Fabricator :company do
organisation_number { Faker::Company.swedish_organisation_number }
end
spec / user_spec.rb (первый тест пройден, второй не пройден)
describe User do
context '#create' do
it 'Creates a user when correct email and password provided' do
user = Fabricate(:user)
expect(user).to be_valid
end
it 'Lets assign a company to user' do
company = Fabricate(:company)
expect(Fabricate.build :user, company: company).to be_valid
end
end
end
Я также попытался добавить компанию прямо к фабрикатору пользователей, вот так (что мне кажется правильной реализацией документации ):
Fabricator :user do
email { Faker::Internet.email }
password '123456'
confirmed_at Time.now
company
end
инаоборот, добавление пользователей в фабрикант компании, например:
Fabricator :company do
organisation_number { Faker::Company.swedish_organisation_number }
users(count: 3) { Fabricate(:user) }
end
, но оба подхода оставили меня с одной и той же ошибкой:
User # create Позволяет назначить компанию пользователю Failure /Ошибка: company = Fabricate (: company)
ActiveModel :: MissingAttributeError: невозможно записать неизвестный атрибут 'company_id'
Есть предложения, что я делаю не так?