2012-08-16 33 views
50

¡Por alguna razón inexplicable, RubyMine guarda automáticamente cada cambio que haga y cada golpe de tecla activará Guard para ejecutar sus pruebas! Y lo más ridículo es que aparentemente no hay forma de desactivar esta "característica" de autoguardado. Me pregunto, RubyMine parece ser un editor muy popular entre los desarrolladores de Rails y Guard parece ser una herramienta indispensable para automatizar las pruebas. Debido a que Guard es imposible de usar razonablemente con RubyMine, ¿cómo lidian las personas con la automatización de sus pruebas con RubyMine?¿Es imposible usar Guard con RubyMine?

+0

Hay un tema abierto para esto: http://youtrack.jetbrains.com/issue/RUBY-9903. – CrazyCoder

+1

¿Cómo es "inexplicable"? –

+0

Personalmente prefiero no tener guardado automático. A veces, especialmente con golpes vim, puede agregar erróneamente un carácter adicional en algún lugar del archivo actual mientras cambia a otro y no lo nota. Por lo general, las pruebas detectan esto, pero una vez en un archivo .js, desplegué una "z" añadida al final y no la capté hasta que realicé las pruebas de varios navegadores por las que IE vomitó en ella. – Ted

Respuesta

144

Im utilizando RubyMine con Guardia todo el día, y de hecho, algunas partes de Guard se han desarrollado en el propio RubyMine.

Puede configurar el comportamiento de autoprotección yendo a RubyMine > Preferences en el menú e ingresando sync en el cuadro de búsqueda, luego seleccione System Settings de la lista.

Configure RubyMine auto safe behavior

La imagen muestra la configuración de mi y estas obras bien. Es posible que también desee deshabilitar Save files on frame deactivation, para solo guardar un archivo en un guardado manual.

Yo prefiero usar Guardia de la terminal, pero puede configurar RubyMine para funcionar Guardia directamente mediante la adición de una configuración Run seleccionando Run > Edit configurations en el menú:

Ahora puede agregar una nueva configuración haciendo clic en el signo más y seleccione +IRB console:

Add new run configuration

AHORA Nombre de la configuración Guard, introduzca la ruta con el Guard en la escritura del IRB y establecer el directorio de trabajo del proyecto. Es posible que desee entrar en sus argumentos como argumentos de la Guardia IRB, al igual que los diferentes grupos de guardias, etc.

Configure the run configuration

encontré mi camino de velar por la apertura de la terminal, se transformó en el directorio de trabajo del proyecto y ha introducido which guard, que resultados en /Users/michi/.rvm/gems/ruby-1.9.3-p194/bin/guard para mi Ruby 1.9.3-p194 SDK administrado por RVM.

A continuación, debe comprobar el Ejecute el script en el contexto del paquete en la pestaña .

Run with bundle exec

Ahora presione OK y tiene una nueva configuración de ejecución marca. Antes de comenzar la Guardia, se debe configurar el interactor sencilla añadiendo

interactor :simple 

a su Guardfile. Ahora se puede ejecutar (o incluso de depuración) Guardia directamente dentro RubyMine:

Guard in Action

disfrutar!

+10

Esa es una respuesta asombrosamente detallada :) – grosser

+0

Genial, gracias! Por alguna razón, guardar mis archivos en RubyMine no activa el protector para volver a ejecutar mis pruebas. ¿Alguna idea de por qué? – alecmce

+1

@alecmce Debería [agregar el soporte adecuado de Readline] (https://github.com/guard/guard/wiki/Add-proper-Readline-support-to-Ruby-on-Mac-OS-X) a su instalación de Ruby . – Netzpirat

1

O puede agregar un archivo run_guard.rb en la raíz de su proyecto con el siguiente código:

exec 'guard' 

¡Cuidado!Rubymine tiene un problema con tu RUTA. Por ejemplo,/usr/local/bin se filtra ...

4

Cuando ejecuta guardias con RubyMine para las pruebas, es extremadamente útil configurar un entorno de base de datos separado para la especificación de guardia, de lo contrario, experimentará problemas extraños (un proceso o los otros se congela o da resultados inconsistentes.

Nombre su entorno especificación guardia "ci" y crear una entrada adicional en database.yml. yo uso "ci" para la automatización continua.

a continuación, poner esto en su archivo Guardfile. La clave es

'RAILS_ENV' => 'ci' 

Así es como tengo la mía configuración:

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 

entonces corro

bundle exec guard -g spec 

también no les importa tener RubyMine guardar archivos automáticamente cada 60 segundos, incluso si eso da inicio a la Guardia, como mi una nueva MBP Retina no disminuye notablemente cuando se ejecuta Guard.

BTW, las especificaciones de funcionamiento de Guard son realmente geniales, ya que usted encontrará pruebas que fallan mucho más rápido que intentar realizar las pruebas usted mismo en RubyMine. Es decir, la prueba básicamente se trata de hacer cuando el dedo se suelta de los cmd-s para guardar.

Ejecuto esto desde la terminal. No he intentado correr con RubyMine. ¿Alguien quiere comentar sobre las ventajas de hacer eso? Supongo que tener el volcado de pila clicable sería agradable.

+0

Me gusta usar 'locate \ */bin/guard' ya que es una manera fácil de mostrar todas las instalaciones del archivo binario en tu sistema :) –

+0

No tengo idea de por qué, pero esto resolvió un montón de E/S y sqlite excepciones de bloqueo para mí. –

2

Este es un problema realmente frustrante, y hace que sea muy difícil usar RubyMine con protector o gruñido u otros corredores de tareas.

he creado un poco de una solución loco, pero que está funcionando lo suficientemente bien como para mí:

  1. Añadir una herramienta externa para ejecutar el comando venerable Unix "toque", que actualiza la marca de tiempo modificada de un archivo, generando un evento de sistema de archivos. Debería verse así: External Tool called touch
  2. Asigne a la herramienta externa un atajo de teclado.
  3. Asigna un atajo de teclado al comando Guardar documento.
  4. Grabe una macro que ejecuta Guardar documento, luego la herramienta externa "táctil". Debe utilizar los atajos de teclado que asignó porque Guardar documento no aparece en los menús de la aplicación.
  5. Asigna Cmd-S como un atajo de teclado para tu nueva macro.

Mi entrada en el blog completo sobre esto es en http://singlebrook.com/blog/saving-files-in-rubymine