Мы разрабатываем приложение на Ruby 1.9.3 и Rails 3.2.1.
В последнее время наши модульные тесты поначалу стали вялыми. Для выполнения вызовов и выполнения требуется ~ 15 секунд. Как только я вижу «Выполнить тест: единицы», требуется еще 10 секунд, прежде чем я увижу какой-либо вывод. Наконец, задача завершается, и тесты выполняются всего за 3 секунды.
3 секунды для юнит-тестов приемлемо. 25-секундное время загрузки нереально для BDD/TDD.
Вот что происходит, когда я запускаю с rake test:units --trace
:
** Invoke test:units (first_time)
** Invoke test:prepare (first_time)
** Invoke db:test:prepare (first_time)
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:abort_if_pending_migrations
** Execute db:test:prepare
** Invoke db:test:load (first_time)
** Invoke db:test:purge (first_time)
** Invoke environment
** Execute db:test:purge
** Execute db:test:load
** Invoke db:test:load_schema (first_time)
** Invoke db:test:purge
** Execute db:test:load_schema
** Invoke db:schema:load (first_time)
** Invoke environment
** Execute db:schema:load
** Execute test:prepare
** Execute test:units
Я не сомневаюсь, что загружаемая, а затем повторно загружаемая схема базы данных может быть ключевым источником медлительность. Однако я ничего не делал с нашим Rakefile
, связанным с модульными тестами. Где я могу заглянуть, чтобы увидеть, что на самом деле происходит под капотом?
Вот что находится вверху test/test_helper.rb
:
require 'simplecov'
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
Что я пробовал:
simplecov
, так как мы используем это только для наш сервер CI, не во время разработки (не имеет значения во времени выполнения)Есть идеи, куда/как я могу засунуть голову дальше, чтобы увидеть?
Есть ли шанс, что Rails выполняет миграции вместо schema:load
? По мере разработки у нас происходит большое количество миграций (~30).
РЕДАКТИРОВАТЬ:
Я использую Macbook Pro 2011 года выпуска с 8G RAM и Core i7 — не думайте, что это моя машина. Я видел в этом вопросе, что в Windows require
может вызвать проблемы.
Я также подумал, что проблема может заключаться в фикстурах, но если бы проблема была в фикстурах, то сами тесты , а не время загрузки тестов, были бы медленными, верно?
РЕДАКТИРОВАТЬ 2:
Благодаря ответу pchap10k я думаю, что это не имеет ничего общего с рейком — это касается нашего Gemfile
. Может быть, мне стоит поискать в этом районе...