11
votes

Est-ce que devrait détruire mes backtraces?

J'ai un test plus ou moins comme ceci: xxx

j'ai délibérément ajouté un xxx

quelque part sur la route et Je reçois cette erreur: xxx

Quand je devrais avoir quelque chose: xxx

eces idées mes backtraces? Mon méfiant est de devoir parce que lorsque l'exception se produit à l'intérieur d'une configuration ou devrait se produire.

Il s'agit d'un projet Rails 3, au cas où c'est important.


8 commentaires

Pourquoi cette augmentation-t-elle si vous voulez soulever une exception? Si c'est un test, ce n'est pas le format de faire.


@shingara je fais que je fais ça juste pour voir à quoi ça ressemble. Ce qui se passe vraiment, c'est que je reçois une exception de quelque part, une autre exception, mais je ne peux pas trouver où quelque chose cache la plus grande partie de la backtrace.


Tous StackTrace que vous rapportez provient de votre «Soulevez Blah». Donc je ne comprends pas votre vraiment problème


@shingara: Mon problème est que la trace de la pile lorsque l'erreur se produit dans une méthode appelée à partir de la configuration ou de ne pas contenir toutes les cadres jusqu'à la levée elle-même. form_definition_test.rb: 79 Nettère "bla", il est soulevé par une méthode appelée par une autre méthode appelée, comme vous pouvez le constater dans la deuxième trace de la pile.


@J. Pablo Fernandez: Si vous ajoutez un élever "bla" afin de poster un exemple minimal (reproductible), nous l'apprécierions si vous pouviez poster un exemple minimal que nous pouvons nous courir (sans avoir Pour ajouter n'importe quel code »pour reproduire le problème.


J'ai aussi ce problème aussi. Avez-vous déjà compris?


Le problème qu'il tente de signaler est que cela devrait avoir l'impression d'avaler en quelque sorte les exceptions soulevées le long du test, caché ainsi leur trace de pile. Je rencontre le même problème.


Peut-être que les silencieux de la backtrace jouent avec vous. Lisez le commentaire dans Config / Initializers / Backtrace_Silencers.rb. Je supprime habituellement tous les nettoyants. Je peux vivre avec de longues backtraces.


3 Réponses :


0
votes

Je pense que cela vous donnera la backtrage que vous voulez. Je ne l'ai pas testé, mais cela devrait fonctionner:

def exclude_backtrace_from_location(location)
  begin
    yeild
  rescue => e
    puts "Error of type #{e.class} with message: #{e.to_s}.\nBacktrace:"
    back=e.backtrace
    back.delete_if {|b| b~=/\A#{location}.+/}
    puts back
  end
end

exclude_backrace_from_location("test/unit") do
  #some shoulda code that raises...
end


0 commentaires

0
votes

Avez-vous vérifié config / initialiseurs / backtrace_silencers.rb ? C'est le point d'entrée pour personnaliser ce comportement. Avec rails.backtrace_cleaner.remove_silencers! Vous pouvez nettoyer la pile de silencieux.

Plus d'informations sur ActiveSupportport :: BackTracecleaner peut être trouvé ici .


0 commentaires

1
votes

c'est-à-dire parce que la méthode de l'appareil #Context génère un code pour vous. Pour chaque bloc #vould Il génère un test complètement séparé pour vous, par exemple, par exemple xxx

puis #vould (code> générera deux tests complètement indépendants ( pour les deux invocations de #vould ), une qui exécute xxx

et une autre qui exécute xxx

Il convient de noter que cela ne contient pas non générer un seul test exécutant toutes les trois étapes dans une séquence.

Ces blocs de codes générés ont des noms de méthodes tels que _Bind _ Quelque chose et le test généré ont un nom qui est une concaténation de tous les noms des contextes traversés au bloc de bloquer plus la chaîne fournie par le blocage de la requête (préfixée). Il y a Un autre exemple dans la documentation pour le contexte de DOIVEMENT .


0 commentaires