Почему мое «время загрузки» rake test:units в Rails 3.2.1 такое медленное?

Мы разрабатываем приложение на 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'

Что я пробовал:

  1. Комментирование simplecov, так как мы используем это только для наш сервер CI, не во время разработки (не имеет значения во времени выполнения)
  2. Комментирование других вещей, но это мешало даже выполнению тестов. Я не совсем уверен, почему там есть эти другие элементы, поскольку я думал, что среда Rails будет загружена в «тест» автоматически.

Есть идеи, куда/как я могу засунуть голову дальше, чтобы увидеть?

Есть ли шанс, что Rails выполняет миграции вместо schema:load? По мере разработки у нас происходит большое количество миграций (~30).

РЕДАКТИРОВАТЬ:

Я использую Macbook Pro 2011 года выпуска с 8G RAM и Core i7 — не думайте, что это моя машина. Я видел в этом вопросе, что в Windows requireможет вызвать проблемы.

Я также подумал, что проблема может заключаться в фикстурах, но если бы проблема была в фикстурах, то сами тесты , а не время загрузки тестов, были бы медленными, верно?

РЕДАКТИРОВАТЬ 2:

Благодаря ответу pchap10k я думаю, что это не имеет ничего общего с рейком — это касается нашего Gemfile. Может быть, мне стоит поискать в этом районе...

6
задан Community 23 May 2017 в 12:30
поделиться