75 votes

Exécution du débogage de ruby dans rspec?

Je suis en train d'essayer de faire fonctionner le débogueur Ruby dans l'une de mes spécifications :

describe User do
  it "devrait être valide" do
    debugger
    User.new.should be_valid
  end
end

Lorsque je lance rspec cependant, j'obtiens :

déclaration debugger ignorée, utilisez l'option -d ou --debug pour activer le débogage

J'ai essayé les commandes suivantes :

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/

Des idées sur comment exécuter rspec de la bonne manière ? Je suis sur Rails 3.0.5, Ruby 1.9.2, RSpec 2.5.1, ruby-debug19.

Merci, Justin.

70voto

Christopher Maujean Points 907

Vous obtiendrez ce que vous voulez en incluant require 'ruby-debug' en haut de votre spécification :

# spec/models/user_spec.rb
require 'spec_helper'
require 'ruby-debug'

describe User do
  it "devrait être valide" do
    debugger
    User.new.should be_valid
  end

Ensuite, vous exécuteriez rake spec ou rspec comme d'habitude

REMARQUE : Je préfère maintenant Ruby 2.0+ et pry. Le processus est à peu près le même :

require 'spec_helper'
require 'pry-debugger'

describe User do
  it "devrait être valide" do
    binding.pry
    expect(User.new).to be_valid
  end

De plus, je mets généralement des requires comme celui-ci dans mon fichier spec_helper, afin que pry-debugger soit disponible pour toutes mes spécifications.

27voto

zetetic Points 29261

Vous pouvez créer un fichier de configuration .rspec à la racine de votre projet et inclure la ligne :

--debug

22voto

Jarl Points 1243

Pour Ruby >= 1.9.2

Vous devriez installer le gem debugger à la place de ruby-debug19. Si vous utilisez bundler, il vous suffit d'ajouter ceci dans votre Gemfile :

group :test do
  gem "debugger"
end

Ensuite, vous pouvez simplement ajouter

rspec < 3.0

--debug

rspec >= 3.0

-rdebugger

dans votre fichier .rspec

Ensuite, vous pouvez simplement exécuter

bundle exec rake spec

sans aucun argument supplémentaire. Il n'est pas nécessaire de modifier votree code source non plus (pas même votre code source de test)

16voto

drinor Points 730

Pour ruby 2.0 j'utilise byebug: https://github.com/deivid-rodriguez/byebug

gem 'byebug'

Code:

# 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

9voto

Odee Odum Points 160

La meilleure façon que j'ai trouvée pour déboguer en rSpec est d'ajouter ce qui suit à votre fichier 'spec_helper.rb'

def logger
  Rails.logger

Vous pouvez ensuite accéder à toutes les méthodes du journal dans vos fichiers rSpec et incorporer des choses telles que le journalisation étiquetée. Bien sûr, ceci est pour Rails 3 et plus récent. Si vous avez une version antérieure à Rails 3, ajoutez ceci à la place :

def logger
  RAILS_DEFAULT_LOGGER

Une fois que vous avez vos déclarations de journalisation en place, vous pouvez entrer

tail -f log/test.log

dans votre terminal shell pour surveiller vos déclarations de journalisation pendant l'exécution des tests.

Bien sûr, dans votre vrai test rspec, vous entreriez quelque chose comme

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

Si vous voulez filtrer vos déclarations de débogage du reste de votre journal de test, ajoutez simplement une chaîne aléatoire à votre déclaration de débogage et redirigez la sortie de la commande tail vers grep.

Exemple :

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

tail -f log/test.log | grep random_string

Mettre à jour

J'ai changé d'avis à ce sujet. Vous devriez installer pry, pry-doc, pry-debug, pry-debugger, et pry-rails. Ensuite, utilisez binding.pry dans votre code pour ouvrir une console de débogage interactive qui règne sur le monde !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X