У меня есть приложение на Ruby on Rails 5, где я использую переменную Thread для доступа к пользователю, инициирующему действие для моей собственной проприетарной регистрации. Все работает нормально, пока не доходит до моих автоматических тестов.
У меня есть модуль в lib/current.rb
:
module Current
thread_mattr_accessor :user
end
В моем app/controllers/application_controller.rb
я установил текущего пользователя следующим образом:
around_action :set_current_user
[...]
def set_current_user
Current.user = current_user
yield
ensure
Current.user = nil
end
При этом я могу войти в систему вошедшего в систему пользователя при создании / обновлении / удалении объекта в моем приложении, например, в app/models/entity.rb
:
after_create :log_create
before_update :log_update
before_destroy :log_destroy, prepend: true
[...]
def log_destroy
ApplicationController.helpers.create_change_log([...], Current.user.id)
end
КакКак указано выше, это работает нормально, пока я не попытаюсь запустить свои автоматические тесты:
entity_instance = Entity.find([...])
entity_instance.destroy
Это приводит к следующему сообщению об ошибке:
Minitest::UnexpectedError: NoMethodError: undefined method `id' for nil:NilClass
Я заверил, что ошибка указывает нанесуществование Current.user
. У кого-нибудь есть идея, почему это может иметь место?