Использование Guard для автоматизации процессов разработки
Если вы уже имели опыт работы с тестами в Rails-приложении, то заметили, что для их запуска надо постоянно обращаться к консоли, отвлекаясь от процесса написания кода. Гораздо удобнее было бы, если бы тесты запускались автоматически по ходу изменения кода приложения. Есть целый ряд инструментов, решающих эту задачу, но мы рассмотрим только один из них – Guard. Разберем что это такое и зачем оно нужно нам, разработчикам на Ruby On Rails.
Guard
Guard нужен для автоматизации процессов. Он просматривает файлы и при их изменении автоматически выполняет различные задачи, например, запускает тесты, перезагружает development сервер, обновляет страницу в браузере и многое другое.
Guard следит за изменениями в вашем проекте и, после их сохранения, выполняет те экшны которые были модифицированы. Большим плюсом является то, что Guard имеет множество плагинов для различных технологий, например RSpec, Cucumber, Minitest и др. Полный список расширений находится на странице гема.
Установка
Установку проще всего проводить так же как и со всеми гемами – прописать в Gemfile нужные гемы. Можно не прописывать сам guard, потому что он все равно установится как зависимость других гемов.
Прописываем Guard для RSpec в Gemfile:
group :development, :test do
gem 'guard-rspec'
end
и затем устанавливаем это с помощью bundle install
.
Инициализация
После установки инициализируем Guard для работы с RSpec: bundle exec guard init rspec
(если используете rvm, то можно не писать bundle exec
).
После выполнения инициализации в нашем проекте появится Guardfile
– файл конфигурации Guard (как конфигурировать его очень подробно объяснено в документации).
Я добавил в свой конфиг следующие строчки, чтобы при изменении контроллера или вьюхи сразу же проверялся соответствующий спек.
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) do |m|
["spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" :
"spec/requests/#{m[1].singularize}_pages_spec.rb")]
end
watch(%r{^app/views/(.+)/}) do |m|
(m[1][/_pages/] ? "spec/requests/#{m[1]}_spec.rb" :
"spec/requests/#{m[1].singularize}_pages_spec.rb")
end
Запуск
Guard запускается простой командой bundle exec guard
(или просто guard если вы используете rvm или уже настроили свое окружение на работу без ввода bundle exec)
И теперь при сохранении изменений вы будете видеть сразу проходят ли соответствующие тесты.
livereload
Так же мы можем менять внешнее представление приложения (html/css) с последующим автоматическим обновлением страницы в браузере. Устанавливаем его так же, как и все остальные гемы – прописываем в Gemfile. Настройки производятся в Guardfile (тут можно почитать про опции подробнее https://github.com/guard/guard-livereload). Обязательно надо будет установить расширение Livereload в браузер в котором вы работаете.
Guard позволяет автоматизировать рутинные процессы при разработке. Автоматический прогон тестов и перезагрузка страницы в браузере – лишь малая часть из возможных вариантов использования. Предлагаю обратиться к документации Guard и найти применение гема для своих нужд.