web-dev-qa-db-fra.com

Exécution de Ruby debug dans rspec?

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.

75
Allyl Isocyanate

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.

70

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

--debug
27
zetetic

Pour Ruby> = 1.9.2

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

rspec <3,0

--debug

rspec> = 3,0

-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)

22
Jarl

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
16
drinor

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

Mise à jour

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!

9
Ode

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.

4
Ryan Taylor