У нас есть модель, которая получает номер последовательности из идентификатора другой модели, используя auto_increment в другой таблице моделей. Это значение устанавливается равным нулю всякий раз, когда сервер db перезапускается, поэтому порядковые номера reset. Чтобы обойти это, в блоке after_initialize мы устанавливаем значение auto_increment для максимального значения последовательности плюс один, и все хорошо.
Однако в тестах блок запускается до загрузки приборов, поэтому максимум возвращается как нуль. Затем, когда тесты выполняются, значение слишком низкое, и поэтому тесты терпят неудачу.
Одним из возможных решений является обновление значения в блоке настройки, но изменение таблицы фиксирует текущую транзакцию, и поэтому откат в конце теста не выполняется.
Как изменить значение AUTO_INCREMENT после загрузки светильников, но до создания точки сохранения?
Наконец, нашел способ сделать это с помощью патча обезьяны load_fixtures
в конце test_helper.rb:
module ActiveRecord
module TestFixtures
def load_fixtures_with_auto_increment_reset
load_fixtures_without_auto_increment_reset
# code to reset auto_increment goes here
end
alias_method :load_fixtures_without_auto_increment_reset, :load_fixtures
alias_method :load_fixtures, :load_fixtures_with_auto_increment_reset
end
end