Originally published at Блог разработчика веба. You can comment here or there.
Недавно открыл для себя Cucumber — утилиту для описания поведения вашего приложения. Весьма хорошая штука, доложу вам. Но о ней конкретно я расскажу как-нибудь потом.
Ещё я использую вместо стендовых данных (известных также как fixtures) замечательный гем от ThoughtBot под названием Factory Girl — он позволяет делать «заготовки» моделей и ваще очень крут (о нём — как вы, может быть, уже догадались — тоже в другой раз).
Но вот соединить их при тестировании одного проекта оказалось не так-то просто! При тестировании функционала каждый сценарий, начиная со второго использования метода Factory.create вылетал с ошибкой. Как показал бэктрэйс — ошибка случалась в функции ActiveRecord::Base.create_time_zone_convмозгов памяти в production-режиме.
Тем не менее, при тестировании функционала эта утечка памяти не так критична, потому как тестовый сервер Cucumber’а запускается и останавливается регулярно — при каждом прогоне, а сервер приложения висит довольно долго и может отъесть довольно большой кусок памяти и подавиться им. Ну, надоели вступительные слова, вот…
…решение проблемы:
Необходимо поместить в директорию lib файл activerecord_reset_sublass_fix.rb, а так же добавить его вызов в файл config/environments/test.rb следующим образом:
