Est-il impossible d’utiliser Guard avec RubyMine?

Pour une raison inexplicable, RubyMine lance automatiquement tous les changements que vous apportez et chaque coup de touche déclenche le test par Guard! Et la chose la plus ridicule est qu’il n’y a apparemment aucun moyen de désactiver cette “fonctionnalité” d’enregistrement automatique. Je me demande, RubyMine semble être un éditeur très populaire parmi les développeurs Rails et Guard semble être un outil indispensable pour automatiser les tests. Puisque Guard est impossible à utiliser raisonnablement avec RubyMine, comment les gens peuvent-ils automatiser leurs tests avec RubyMine?

J’utilise RubyMine with Guard toute la journée et, en fait, certaines parties de Guard ont été développées dans RubyMine.

Vous pouvez configurer le comportement de sécurité automatique en accédant à RubyMine > Preferences dans le menu et entrer la sync dans la zone de recherche, puis sélectionnez System Settings dans la liste.

Configurer le comportement de sécurité automatique RubyMine

La photo montre mes réglages et ceux-ci fonctionnent bien. Vous pouvez également désactiver les Save files on frame deactivation , pour enregistrer uniquement un fichier dans une sauvegarde manuelle.

Je préfère utiliser Guard depuis le terminal, mais vous pouvez configurer RubyMine pour qu’il exécute Guard directement en ajoutant une configuration Run en sélectionnant Run > Edit configurations dans le menu:

Maintenant, vous pouvez append une nouvelle configuration en cliquant sur le signe plus + et sélectionner la IRB console :

Ajouter une nouvelle configuration d'exécution

Maintenant, nommez la configuration Guard , entrez le chemin d’access à Guard dans le script IRB et définissez le répertoire de travail du projet. Vous voudrez peut-être entrer vos arguments de garde en tant qu’arguments IRB, comme différents groupes de gardes, etc.

Configurez la configuration d'exécution

J’ai trouvé mon chemin vers Guard en ouvrant le terminal, en changeant dans le répertoire de travail du projet et en entrant la which guard , ce qui a pour résultat /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard pour mon Ruby 1.9 .3-p194 SDK géré par RVM.

Ensuite, vous devez cocher la case Exécuter le script en contexte de l’ensemble dans l’onglet Bundler .

Exécuter avec exec bundle

Maintenant, appuyez sur OK et vous avez une nouvelle configuration d’exécution. Avant de démarrer Guard, vous devez configurer l’interacteur pour simplifier en ajoutant

 interactor :simple 

à votre Guardfile . Maintenant, vous pouvez exécuter (ou même déboguer) Guard directement dans RubyMine:

Garde en action

Prendre plaisir!

Lorsque vous exécutez guard avec RubyMine pour des tests, il est extrêmement utile de configurer un environnement de firebase database distinct pour les spécifications de garde, sinon vous rencontrerez des problèmes étranges (un processus ou l’autre gèle ou donne des résultats incohérents).

Nommez votre environnement de spécification de garde “ci” et créez une entrée supplémentaire dans database.yml. J’utilise “ci” pour l’automatisation continue.

Ensuite, mettez ceci dans votre fichier de garde. L’essentiel est

 'RAILS_ENV' => 'ci' 

Voici comment j’ai la configuration de la mine:

 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 

Je cours alors

 bundle exec guard -g spec 

Cela ne me dérange pas non plus que RubyMine enregistre automatiquement les fichiers toutes les 60 secondes, même si cela déclenche Guard, car mon nouveau MBP Retina ne ralentit pas sensiblement lors de l’exécution de Guard.

BTW, les spécifications de fonctionnement de Guard sont vraiment géniales car vous trouverez des tests échouant beaucoup plus rapidement que d’essayer de lancer les tests vous-même dans RubyMine. C’est-à-dire que le test est à peu près terminé au moment où mon doigt sort de cmd-s pour enregistrer.

Je lance ceci depuis le terminal. Je n’ai pas essayé de courir avec RubyMine. Quelqu’un veut-il commenter les avantages de le faire? Je suppose qu’avoir le cliquetis cliquable de la stack serait bien.

C’est un problème très frustrant et il est très difficile d’utiliser RubyMine avec un garde, un grognement ou d’autres utilisateurs.

J’ai créé une solution de contournement un peu folle, mais ça fonctionne assez bien pour moi:

  1. Ajoutez un outil externe pour exécuter la vénérable commande Unix “touch”, qui met à jour l’horodatage modifié d’un fichier, générant ainsi un événement de système de fichiers. Ça devrait ressembler à ça: Outil externe appelé tactile
  2. Atsortingbuez à l’outil externe un raccourci clavier.
  3. Atsortingbuez un raccourci clavier à la commande Enregistrer le document.
  4. Enregistrez une macro qui exécute Save Document, puis le “touch” External Tool. Vous devez utiliser les raccourcis clavier que vous avez atsortingbués car Enregistrer document n’apparaît pas dans les menus de l’application.
  5. Atsortingbuez Cmd-S comme raccourci clavier pour votre nouvelle macro.

Mon blog complet à ce sujet est à http://singlebrook.com/blog/saving-files-in-rubymine

Ou vous pouvez append un fichier run_guard.rb à la racine de votre projet avec le code suivant:

 exec 'guard' 

Fais attention! Rubymine a un problème avec votre PATH. Par exemple, / usr / local / bin est filtré …