2008-09-15 4 views
43

Всякий раз, когда я запускаю rspec-тесты для моего приложения Rails, он берет навсегда и день накладных расходов, прежде чем он начнет запускать тесты. Почему rspec так медленно? Есть ли способ ускорить первоначальную загрузку Rails или выделить часть моего приложения Rails, которое мне нужно (например, только ActiveRecord), чтобы он не загружал абсолютно все, чтобы выполнить несколько тестов?Почему RSpec так медленно под Rails?

ответ

22

Вы должны иметь возможность ускорить ваши звонки script/spec, запустив script/spec_server в отдельном окне терминала, а затем добавив дополнительный параметр -X к вашим вызовам спецификации.

+0

Чтобы быть понятным, вы должны сделать что-то вроде этого: spec --color ./spec -X – 2009-09-01 06:04:12

+21

spec_server теперь устарел в пользу spork. (http://github.com/timcharper/spork) – austinfromboston 2010-02-25 05:09:11

+2

https://github.com/sporkrb/spork - новый источник spork – ted 2013-03-05 13:57:22

3

Вы управляете этим над Rails? Если это так, то инициализация RSpec не медленная, это Rails. Rails должен инициализировать всю кодовую базу и ваш перед запуском спецификаций. Ну, это не есть to, но это так. RSpec работает довольно быстро для меня под моими небольшими проектами без рельсов.

+0

Спасибо за этот ответ. Я уточнил, что вопрос должен быть специфичным для Rails. – 2008-09-15 20:53:23

+0

Тогда да, его рельсы, а не rspec, что замедляет вас. – 2008-09-15 21:37:39

3

Запуск тестов может быть очень медленным, потому что вся рабочая среда рельсов должна загружаться (попробуйте скрипт/консоль), и только тогда все тесты могут выполняться. Вы должны использовать autotest, который поддерживает загрузку среды и проверяет, какие файлы вы редактируете. Когда вы редактируете и сохраняете файл, только те тесты, которые зависят от них, будут выполняться автоматически и быстро.

2

Если вы используете Mac, я рекомендую использовать Rspactor над автотестом, поскольку он использует намного меньше ресурсов для опроса измененных файлов, чем автотест. Существует как полная версия какао

RSpactor.app

или версия драгоценный камень, который я поддерживаю на Github

sudo gem install pelle-rspactor 

Хотя это не ускорить отдельные тесты RSpec, они чувствуют себя гораздо быстрее, так как они авто запустите уязвимую спецификацию в течение секунды, когда вы нажмете save.

1

Если вы находитесь в среде Windows, то, вероятно, мало что можно сделать, поскольку Rails, похоже, очень медленно запускается под Windows. У меня был тот же опыт в Windows, и мне пришлось переместить мою установку на виртуальную машину Linux, чтобы сделать ее действительно незаметной (я также использовал автотест).

4

Почему rspec так медленно?, потому что он загружает все environement, загружает светильники и весь этот джаз.

Есть ли способ ускорить загрузку Rails, вы можете попробовать использовать mocks вместо того, чтобы полагаться на базу данных, это действительно правильно для модульного тестирования и, безусловно, ускорит ваши модульные тесты. Ценам добавляется с помощью сервера спецификации, как упоминалось на @Scott Matthewman может помочь, то же самое с автотеста из zentest упоминалось на @Marc-Andre Lafortune

Есть ли способ, чтобы выделить часть моего приложения Rails, мне нужно (например, только ActiveRecord материал) так он не загружает абсолютно все, чтобы выполнить несколько тестов?, что об этом

rake test:recent 

Я не знаю, как RSpec задача интегрировать с этим, но вы можете определенно использовать тест: недавнее задание в качестве шаблона, чтобы сделать то же самое с RSpec тесты, если.

rake test:rspec:recent 

не существует еще

4

, потому что он загружает все environement, загружает светильники и все, что джаз.

Настоящий преступник, если вы его используете, используя rake spec, it runs the db:test:prepare task.

Эта задача сводит всю тестовую базу данных и воссоздает ее с нуля. Это кажется мне смешным, но это то, что он делает (то же самое происходит, когда вы запускаете rake:test:units и т. Д.).

Вы можете легко обойти это с помощью приложения spec, которое rspec устанавливает как часть драгоценного камня rspec.

Как это:

cd railsapp 
spec speC# run all specs without rebuilding the whole damn database 
spec spec/models # run model specs only 

cd spec 
spec controllers/user* # run specs for controllers that start with user 
4

Я думаю, что «дзэн» опыт, который вы ищете, чтобы запустить spec_server и autospec в фоновом режиме, с результатом будучи почти мгновенные тесты при сохранении файла.

Однако у меня возникают проблемы с передачей этих двух программ.

я нашел объяснение here:

Я заметил, что автоиспытания не отправляет команды на spec_server. Вместо этого он перезагружает всю среду Rails и плагины вашего приложения каждый раз, когда он выполняется. Это приводит к тому, что автотест запускает значительно медленнее, чем сервер сценариев, потому что при запуске команды сценария/спецификации спецификации отправляются на spec_server, у которого уже запущена и готова к работе ваша Rails-среда. Если вы установите , установите новый плагин или что-то в этом роде, то вам нужно будет перезагрузить spec_server .

Но как мы исправим эту проблему? Я предполагаю, что это будет связано с загрузкой ZenTest и изменением кода для программы autotest, но у вас нет времени попробовать ее прямо сейчас.

2

Начиная с rspec-rails-1.2.7, spec_server устарел в пользу драгоценного камня spork.

2

Основная причина в том, что для этого требуется навсегда на окнах, почему-то.

Советы для ускорения: spork теперь работает с окнами, я считаю.

Вы можете попробовать "faster_require", который кэширует местоположения:

http://github.com/rdp/faster_require

GL. -rp

32

Я определенно предлагаю проверить свист.

http://spork.rubyforge.org/

railstutorial конкретно решает эту проблему, и дает обходной путь, чтобы получить Spork работает хорошо в рельсах 3.0 (по состоянию на данный момент, Spork не Рельсы 3 готов из коробки). Конечно, если вы не на рейках 3.0, то вам должно быть хорошо идти.

Часть учебника показывает, как получить Spork работает в рельсах 3.0

http://railstutorial.org/chapters/static-pages#sec:spork

Проверки когда Spork является Рельсы 3.0 готовых

http://www.railsplugins.org/plugins/440-spork