Подтвердить что ты не робот

Почему RSpec настолько медленный под Rails?

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

4b9b3361

Ответ 1

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

Ответ 2

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

http://spork.rubyforge.org/

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

Часть учебника, показывающая, как запустить spork в rails 3.0

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

Проверка, когда spork - рельсы 3.0 готовы

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

Ответ 3

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

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

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

rake test:recent 

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

rake test:rspec:recent

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

Ответ 4

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

Реальным виновником является то, что вы запускаете его с помощью rake spec, он запускает задачу db:test:prepare.

Эта задача оставляет всю тестовую базу данных и воссоздает ее с нуля. Это кажется мне смешным, но то, что он делает (то же самое происходит при запуске 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

Ответ 5

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

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

Я нашел объяснение здесь:

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

RSpactor.app

или версию gem, которую я поддерживаю в Github

sudo gem install pelle-rspactor

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

Ответ 9

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

Ответ 10

Основная причина заключается в том, что по какой-то причине требуется зависание на окнах.

Советы по ускорению: Похоже, что spork теперь работает с окнами.

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

http://github.com/rdp/faster_require

GL. -rp

Ответ 11

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