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

Невозможно ли использовать Guard с RubyMine?

По какой-то необъяснимой причине RubyMine автоматически запоминает каждое изменение, которое вы делаете, и поэтому каждый ход ключа запускает Guard для запуска ваших тестов! И самое смешное в том, что, по-видимому, нет возможности отключить эту функцию автосохранения. Мне просто интересно, RubyMine, кажется, очень популярный редактор среди разработчиков Rails, и Guard, похоже, является незаменимым инструментом, используемым для автоматизации тестирования. Поскольку Guard невозможно использовать разумно с RubyMine, как люди справляются с автоматизацией своих тестов с RubyMine?

4b9b3361

Ответ 1

Я использую RubyMine с Guard весь день, и на самом деле некоторые части Guard были разработаны в RubyMine.

Вы можете настроить поведение автобезопасности, перейдя в RubyMine > Preferences в меню и введите sync в поле поиска, затем выберите System Settings из списка.

Настроить безопасное поведение RubyMine

На картинке показаны мои настройки, и все работает нормально. Вы также можете отключить Save files on frame deactivation, чтобы сохранить файл только вручную.

Я предпочитаю использовать Guard с терминала, но вы можете настроить RubyMine для непосредственного запуска Guard, добавив конфигурацию Run, выбрав Run > Edit configurations в меню:

Теперь вы можете добавить новую конфигурацию, щелкнув знак плюса + и выберите IRB console:

Add new run configuration

Теперь назовите конфигурацию Guard, введите путь к Guard в IRB script и установите рабочий каталог проекта. Вы можете ввести аргументы Guard в качестве аргументов IRB, например, различные группы Guard и т.д.

Configure the run configuration

Я нашел свой путь к Guard, открыв терминал, изменив его в рабочий каталог проекта и введя which guard, что приводит к /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard для моего SDK Ruby 1.9.3-p194, управляемого RVM.

Затем вам нужно проверить Run script в контексте пакета на вкладке Bundler.

Run with bundle exec

Теперь нажмите OK, и у вас есть совершенно новая конфигурация запуска. Перед запуском Guard вы должны настроить интерактивность на простой, добавив

interactor :simple

к вашему Guardfile. Теперь вы можете запускать (или даже отлаживать) Guard непосредственно в RubyMine:

Guard in Action

Наслаждайтесь!

Ответ 2

Когда вы запускаете защиту с помощью RubyMine для тестов, чрезвычайно полезно настроить отдельную среду базы данных для спецификации защиты, иначе вы столкнетесь с необычными проблемами (один процесс или другой зависает или дает непоследовательные результаты.

Назовите свою среду спецификаций защиты "ci" и создайте дополнительную запись в файле database.yml. Я использую "ci" для непрерывной автоматизации.

Затем поместите это в свой файл Guardfile. Главное -

'RAILS_ENV' => 'ci'

Здесь у меня есть моя настройка:

group :spec do
  guard :spork, :rspec_port => 1234, :cucumber_env => { 'RAILS_ENV' => 'ci' }, :rspec_env => { 'RAILS_ENV' => 'ci' } do
    watch('config/application.rb')
    watch('config/environment.rb')
    watch(%r{^config/environments/.+.rb$})
    watch(%r{^config/initializers/.+.rb$})
    watch('spec/spec_helper.rb')
    watch(%r{app/models/.+\.rb})
    watch(%r{app/views/.+\.haml})
    watch('Gemfile')
    watch('Gemfile.lock')
    watch('test/test_helper.rb')
  end

  # environment is 'ci'
  guard :rspec, :cli => '--drb --drb-port 1234', :version => 2, :all_after_pass => false, :notification => true, :environment => 'ci' do
    watch(%r{^spec/.+_spec.rb$})
    watch(%r{^lib/(.+).rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
    watch('spec/spec_helper.rb')  { "spec" }
  # Rails example
    watch(%r{^spec/.+_spec.rb$})
    watch(%r{^app/(.+).rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
    watch(%r{^lib/(.+).rb$})                           { |m| "spec/lib/#{m[1]}_spec.rb" }
    watch(%r{^app/controllers/(.+)_(controller).rb$})  do |m|
      ["spec/routing/#{m[1]}_routing_spec.rb",
       "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb",
       "spec/acceptance/#{m[1]}_spec.rb",
       "spec/requests/#{m[1]}_spec.rb"]
    end

    watch(%r{^spec/support/(.+).rb$})                  { "spec" }
    watch('config/routes.rb')                          { "spec/routing" }
    watch('app/controllers/application_controller.rb')  { "spec/controllers" }
    # Capybara request specs
    watch(%r{^app/views/(.+)/.*.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
  end
end

Затем я запустил

bundle exec guard -g spec

Я также не против того, чтобы RubyMine сохранял файлы автоматически каждые 60 секунд, даже если это срабатывает Guard, так как моя новая MBP Retina не заметно замедляется при запуске Guard.

BTW, характеристики гейн-гейма действительно велики, так как вы найдете неудачные тесты намного быстрее, чем пытаться запускать тесты самостоятельно в RubyMine. I.e., тест в основном делается к тому моменту, когда мой палец освобождается от cmd-s для сохранения.

Я запускаю это из терминала. Я не пробовал работать с RubyMine. Кто-нибудь хочет прокомментировать преимущества этого? Я предполагаю, что щелчок в стеке будет удобным.

Ответ 3

Это очень неприятная проблема, и очень сложно использовать RubyMine с защитой или хрюканьем или другими участниками задач.

Я создал немного сумасшедшего обходного пути, но он достаточно хорошо работает для меня:

  • Добавить внешний инструмент для запуска почтенной команды "touch" Unix, которая обновляет измененную метку времени файла, тем самым генерируя событие файловой системы. Он должен выглядеть так: External Tool called touch
  • Назначьте внешнему инструменту сочетание клавиш.
  • Назначьте сочетание клавиш с командой "Сохранить документ".
  • Запишите макрос, который запускает "Сохранить документ", а затем "Прикоснитесь" к внешнему инструменту. Вам нужно использовать сочетания клавиш, которые вы назначили, поскольку Save Document не отображается в меню приложения.
  • Назначьте Cmd-S в качестве сочетания клавиш для нового макроса.

Мое полное сообщение в блоге об этом в http://singlebrook.com/blog/saving-files-in-rubymine

Ответ 4

Или вы можете добавить файл run_guard.rb в корень вашего проекта со следующим кодом:

exec 'guard'

Остерегайтесь! У Rubymine есть проблемы с вашей PATH. Например, /usr/local/bin фильтруется...