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