web-dev-qa-db-fra.com

Comment obtenir rspec-2 pour donner la trace complète associée à un échec de test?

En ce moment, si je lance ma suite de tests en utilisant rake spec Je reçois une erreur:

 1) SegmentsController GET 'index' devrait fonctionner 
 Échec/erreur: obtenir 'index' 
 Méthode non définie `locale 'pour # 
 # ./Spec/controllers /segments_controller_spec.rb:14:
 dans `block (3 niveaux) in '

C'est normal car j'ai une erreur :)

Le problème est que la trace n'est pas très utile. Je sais que ça s'est cassé dans segments_controller_spec.rb, ligne 14, mais c'est là que j'appelle le test:

### segments_controller_spec.rb:14
get 'index'

Je préférerais avoir la rupture de ligne réelle et la trace complète, pas la partie dans le dossier spec.

Courir avec --trace n'aide pas.

94
marcgg

Vous devez exécuter rspec avec -b option pour voir les traces complètes

242
solnic

Une autre alternative (plus simple) consiste à modifier le .rspec fichier et ajoutez l'option backtrace. Cela devrait ressembler à ceci:

--colour
--backtrace

Cela vous donnera la trame complète. J'espère que cela t'aides.

29
nathanvda

Cela fonctionnera également:

# Rails_helper.rb
RSpec.configure do |config|
  config.full_backtrace = true
end
3
Maria V

Une autre approche consiste à supprimer tous les modèles d'exclusion de trace dans spec_helper.rb. J'aime plus cette solution car je suis capable de conserver tous les paramètres RSpec en un seul endroit et de me débarrasser de .rspec file ou explicite --backtrace dans .travis.yml.

# spec_helper.rb
RSpec.configure do |config|
  config.backtrace_exclusion_patterns = []
end
2
Nowaker

Une autre option lorsque tout le reste échoue consiste simplement à ajouter un bloc de secours et à imprimer la pile. Essayez ou ajoutez-y une instruction de liaison obligatoire et utilisez show-stack.

rescue Exception => e
  puts ""
  puts e.backtrace
  puts ""
0
Michael Yagudaev

Je ne sais pas comment faire apparaître l'erreur du contrôleur dans rspec. Parfois, il apparaît, mais je ne sais pas quelles conditions le font apparaître. Voici cependant un moyen de voir l'erreur assez rapidement:

Ouvrez une autre session de terminal et exécutez:

tail -f log/test.log

Revenez ensuite à la session du terminal et exécutez uniquement la spécification qui contenait l'erreur:

bin/rspec -b spec/requests/posts/index_spec.rb

Retournez à la fin du journal et vous devriez voir l'erreur, espérons sans trop d'autres choses l'entourant (car vous avez exécuté le test d'échec par lui-même).

0
Benjamin Atkin