Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

http://spork.rubyforge.org/

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

Часть руководства, показывающая, как запустить spork в рельсах 3.0.

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

Проверка готовности spork к Rails 3.0

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

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

Есть ли способ ускорить начальную загрузку Rails? вы можете попробовать использовать макеты вместо того, чтобы полагаться на базу данных, это действительно правильно для модульного тестирования и определенно ускорит ваши модульные тесты.Дополнительно используя сервер спецификаций, как указано @Скотт Мэтьюман может помочь, то же самое с автотестом от zentest, упомянутым @Марк-Андре Лафортюн

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

rake test:recent 

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

rake test:rspec:recent

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

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

Настоящий виновник в том, что вы запускаете его, используя 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

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

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

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

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

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

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

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

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

RSpactor.app

или версия драгоценного камня, которую я поддерживаю по адресу Гитхаб

sudo gem install pelle-rspactor

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

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

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

Советы по ускорению:Я полагаю, что spork теперь работает с Windows.

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

http://github.com/rdp/faster_require

ГЛ.-рп

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top