Действительно ли нормально для моего набора тестов занять 5 секунд только для запуска? Выполняя пустой комплект это все еще занимает у этого много времени. Это, потому что это разжигает новый экземпляр направляющих на каждом выполнении? Если так, должен там так или иначе сохранить это персистентным?
Пример:
rlepidi@rlepidi:~/projects/rails/my_project$ time rake test
/usr/bin/ruby1.9.1 -I"lib:test" "/var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/release_test.rb"
Loaded suite /var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader
Started
Finished in 0.000181867 seconds.
0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed
real 0m4.173s
user 0m3.820s
sys 0m0.288s
Как Вы видите, этот пустой тест действительно быстр, но существует все еще 4 секунды издержек по некоторым причинам. Я использую Тест:: Единица с Должна иметь.
Узкое место в скорости тестирования - это время, необходимое Rails для загрузки своего окружения. Запустите скрипт / консоль и посмотрите, сколько времени потребуется, чтобы загрузить вас в вашу среду ... он должен быть таким же.
Если у вас достаточно большая кодовая база со множеством плагинов и гемов, время загрузки может достигать 1 минуты !! Если вы, как я, перестанете запускать тесты b / c, вам надоело ждать 30 секунд, чтобы протестировать небольшое изменение, вам нужно запустить тестовый сервер, например spec_server, или даже лучше: spork!
Вы обнаружите, что могут возникнуть странные проблемы, связанные с кешированием классов с помощью spec_server, поэтому я предпочитаю spork.
Как долго длится ваш тест? Обычно тесты Rails занимают много времени из-за доступа к базе данных. Чтобы ускорить их в качестве начального улучшения, вы можете:
прекратить использование экземпляров фикстур, установив:
self.use_instantiated_fixtures = false
начать использовать транзакционные фикстуры, установив:
self.use_transactional_fixtures = true
Чтобы еще больше повысить производительность тестов, рассмотрите возможность использования предварительно загруженных приспособлений .