J'essaie d'obtenir Ruby débogueur en cours d'exécution dans l'une de mes spécifications:
describe User do
it "should be valid" do
debugger
User.new.should be_valid
end
end
Quand je lance rspec, j'obtiens:
debugger statement ignored, use -d or --debug option to enable debugging
J'ai essayé ce qui suit:
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 la façon d'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.
Vous obtiendrez ce que vous voulez en incluant require 'Ruby-debug'
en haut de vos spécifications:
# 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
Vous exécuteriez alors rake spec
ou rspec
comme d'habitude
NOTE: Je préfère maintenant Ruby 2.0+ et pry. C'est à peu près le même processus:
require 'spec_helper'
require 'pry-debugger'
describe User do
it "should be valid" do
binding.pry
expect(User.new).to be_valid
end
end
De plus, je mets généralement des exigences comme celle-ci dans mon fichier spec_helper, afin que le pry-debugger soit disponible pour toutes mes spécifications.
Vous pouvez créer un .rspec
fichier de configuration à la racine de votre projet et incluez la ligne:
--debug
Vous devez installer le débogueur gem au lieu de Ruby-debug19. Si vous utilisez bundler , vous venez de le mettre dans votre Gemfile:
group :test do
gem "debugger"
end
Après cela, vous pouvez simplement mettre
--debug
-rdebugger
dans votre .rspec
fichier
Ensuite, vous pouvez simplement exécuter
bundle exec rake spec
sans aucun argument supplémentaire. Il n'y a pas besoin non plus de modifier votre code source (pas même votre code source de test)
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
Le meilleur moyen que j'ai trouvé pour déboguer dans rSpec est d'ajouter ce qui suit à votre fichier 'spec_helper.rb'
def logger
Rails.logger
end
Vous pouvez ensuite accéder à toutes les méthodes d'enregistrement dans vos fichiers rSpec et incorporer des éléments tels que la journalisation balisée. Bien sûr, cela vaut pour Rails 3 et plus. Si vous avez quelque chose avant Rails 3, ajoutez ceci à la place:
def logger
Rails_DEFAULT_LOGGER
end
Une fois vos relevés de consignation en place, vous pouvez saisir
tail -f log/test.log
dans votre terminal Shell afin de surveiller vos instructions de journalisation pendant l'exécution des tests.
Bien sûr, dans votre test rspec réel, vous entrez quelque chose comme
logger.debug "#{1.class}" # => Fixnum
Si vous souhaitez filtrer vos instructions de débogage à partir du reste de votre journal de test, ajoutez simplement une chaîne aléatoire à votre instruction de débogage et dirigez la sortie de la commande tail vers grep.
Exemple:
logger.debug "random_string #{1.class}" # => Fixnum
tail -f log/test.log | grep random_string
J'ai changé d'avis à ce sujet. Vous devez installer pry, pry-doc et pry-debug, pry-debugger et pry-Rails. Utilisez ensuite binding.pry dans votre code pour ouvrir une console de débogage interactive qui gouverne le monde!
L'option la meilleure et la plus propre consiste à utiliser --require
dans votre .rspec
fichier. Ce que vous mettez dépend de la gemme que vous utilisez pour le débogage.
--color
--require pry
--require Rails_helper
Celles-ci correspondent aux options de ligne de commande (-d ou --debug est désormais obsolète).
N'hésitez pas à utiliser debugger
, Ruby-debug
ou pry
(pry-Rails dans votre Gemfile).
Pour votre Gemfile:
group :test, :development do
gem 'pry-Rails'
end
En mettant require 'Ruby-debug'
etc. en haut de votre spécification est simplement plus étroitement couplé - d'autant plus qu'ici le commentaire le plus voté suggère de le mettre individuellement dans TOUS vos fichiers. Avec le nouveau .rspec
fichier que vous ne devriez pas avoir besoin de mettre require 'spec_helper'
ou require 'Rails_helper'
en haut de vos fichiers.
Ils ont plus de sens comme arguments implicites de ligne de commande.