rails print logger log how ruby-on-rails rspec rake ruby-debug

ruby-on-rails - print - ruby logger levels



¿Ejecutar Ruby Debug en rspec? (6)

Para Ruby> = 1.9.2

Debe instalar la gema debugger lugar de ruby-debug19. Si usas bundler , simplemente pones esto en tu Gemfile:

group :test do gem "debugger" end

Después de eso, puedes poner

rspec <3.0

--debug

rspec> = 3.0

-rdebugger

en su archivo .rspec

Entonces solo puedes correr

bundle exec rake spec

sin ningún argumento adicional. No hay necesidad de modificar su código fuente tampoco (ni siquiera su código fuente de prueba)

Estoy tratando de ejecutar el depurador Ruby en una de mis especificaciones:

describe User do it "should be valid" do debugger User.new.should be_valid end end

Sin embargo, cuando ejecuto rspec, obtengo:

debugger statement ignored, use -d or --debug option to enable debugging

He intentado lo siguiente:

rake spec --debug rake spec --debug --trace rake spec:models --debug bundle exec rspec --debug bundle exec rspec --debug spec/models/ bundle exec rspec --d spec/models/ bundle exec "rspec --debug" spec/models/ bundle exec rspec --debugger spec/models/ bundle exec --debugger rspec spec/models/ bundle --debugger exec rspec spec/models/ bundle --debugger exec rspec spec/models/ bundle exec --debugger rspec spec/models/ bundle exec rspec --debugger spec/models/

¿Alguna idea sobre cómo ejecutar la especificación de la manera correcta? Estoy en Rails 3.0.5, Ruby 1.9.2, RSpec 2.5.1, ruby-debug19.

Gracias, Justin.


La mejor manera que he encontrado para depurar en rSpec es agregando lo siguiente a tu archivo ''spec_helper.rb''

def logger Rails.logger end

A continuación, puede acceder a todos los métodos de registro en sus archivos rSpec e incorporar cosas tales como el registro etiquetado. Esto por supuesto es para Rails 3 en adelante. Si tiene algo anterior a Rails 3, agregue esto en su lugar:

def logger RAILS_DEFAULT_LOGGER end

Una vez que tenga sus declaraciones de registro en su lugar, puede ingresar

tail -f log/test.log

en su caparazón terminal para ver sus declaraciones de registro mientras se ejecutan las pruebas.

Por supuesto, en su prueba rspec real, usted ingresaría algo como

logger.debug "#{1.class}" # => Fixnum

Si desea filtrar sus instrucciones de depuración del resto de su registro de prueba simplemente anteponga una cadena aleatoria a su enunciado de depuración y canalice el resultado del comando de cola a grep.

Ejemplo:

logger.debug "random_string #{1.class}" # => Fixnum tail -f log/test.log | grep random_string

Actualizar

Cambié mi opinión sobre esto. Debe instalar pry, pry-doc, y pry-debug, pry-debugger y pry-rails. ¡Entonces utiliza binding.pry en tu código para abrir una consola de depuración interactiva que gobierna el mundo!


La mejor y más limpia opción es usar --require en su archivo .rspec . Lo que pones depende de qué gema usas para la depuración.

--color --require pry --require rails_helper

Estos corresponden a las opciones de línea de comando (-d o --debug ahora está en desuso).

Siéntase libre de usar debugger , ruby-debug o pry (pry-rails en su Gemfile).

Para su Gemfile:

group :test, :development do gem ''pry-rails'' end

Poner require ''ruby-debug'' etc. en la parte superior de su especificación es simplemente más estrechamente acoplado, especialmente porque aquí el comentario más votado sugiere ponerlo individualmente en TODOS sus archivos. Con el nuevo archivo .rspec que no debería necesitar, require ''spec_helper'' o require ''rails_helper'' en la parte superior de sus archivos.

Tienen más sentido como argumentos de línea de comando implícitos.


Obtendrá lo que desea al incluir require ''ruby-debug'' en la parte superior de su especificación:

# spec/models/user_spec.rb require ''spec_helper'' require ''ruby-debug'' describe User do it "should be valid" do debugger User.new.should be_valid end end

A continuación, ejecute rake spec o rspec forma normal

NOTA: ahora prefiero Ruby 2.0+ y entrometido. Es más o menos el mismo proceso:

require ''spec_helper'' require ''pry-debugger'' describe User do it "should be valid" do binding.pry expect(User.new).to be_valid end end

Además, en general, pido lo siguiente en mi archivo spec_helper, de modo que el depurador de prismas esté disponible para todas mis especificaciones.


Para ruby ​​2.0 utilizo byebug: https://github.com/deivid-rodriguez/byebug

gem ''byebug''

Código:

# spec/models/user_spec.rb require ''spec_helper'' require ''byebug'' describe User do it "should be valid" do byebug User.new.should be_valid end end


Puede crear un archivo de configuración .rspec en la raíz de su proyecto e incluir la línea:

--debug