В этом приложении есть модель, которая отслеживает смену ролей. Тест, который я собираюсь описать, проходит последние пару лет без проблем и только начинает проваливаться, когда я обновил версию rails с 5.1 до 5.2.
Вот выдержка из модели:
class RoleChange < ApplicationRecord
acts_as_paranoid
belongs_to :actor, class_name: 'User', foreign_key: 'actor_id'
belongs_to :subject, class_name: 'User', foreign_key: 'subject_id'
validates :subject_id, presence: true
def subject
User.with_deleted.find(subject_id)
end
...
end
И утверждение, которое не выполняется в спецификации c, является следующим
require 'rails_helper'
RSpec.describe RoleChange, type: :model do
let(:organization) { create(:organization) }
let(:admin) { organization.users.admins.first }
let!(:user) { create(:employee_user, organization: organization) }
subject { create(:role_change, subject: user, actor: admin) }
describe 'associations' do
it { is_expected.to belong_to(:actor) }
it { is_expected.to belong_to(:subject) }
end
...
end
Второе утверждение ассоциации завершается ошибкой:
1) RoleChange associations is expected to belong to subject required:
Failure/Error: User.with_deleted.find(subject_id)
ActiveRecord::RecordNotFound:
Couldn't find User without an ID
# ./app/models/role_change.rb:28:in `subject'
Это очень расстраивает.
Когда я binding.pry
внутри блока it
, субъект выглядит как valid?
и persisted?
с subject_id
, как и следовало ожидать.
Только когда я запускаю утверждение, subject_id
магически становится nil
.
Для дополнительного контекста, мои приключения в консоли rails:
, когда я запускаю утверждение, оно терпит неудачу и говорит, что ноль не может быть найдено:
Полностью сбивает с толку. Можете ли вы помочь мне закончить sh это обновление рельсов? Это мой последний неудачный тест.
ОБНОВЛЕНИЕ:
удаление метода получения subject
из RoleChange
делает тестовый проход, но тогда я теряю преимущество включения удаленных пользователей в запрос. Так что ... на самом деле не похоже на решение.