2016-11-19 5 views
1

Je suis en train d'écrire des cas de test pour une application basée sur le Web Catalyst Perl avec Test :: WWW :: Mechanize ::Catalyseur. J'ai bloqué quelque part et je veux dépanner en imprimant une variable/valeur de hachage. Mais le problème est qu'il montre juste le journal de la console de Catalyst App. Comment puis-je imprimer une valeur de variable dans la console? comme dans le catalyseur $ c-> log-> info ($ valeur variable).Impossible d'imprimer une variable/hachage dans un cas de test avec Test :: WWW :: :: Mechanize Catalyst application catalyseur perl

Répondre

1

Lorsque vous exécutez vos tests avec prove vous devez ajouter le drapeau -v pour voir tous les résultats de test.

$ prove -v t/ 

De cette façon, il ne consommera pas toute la sortie TAP.

Vous pouvez ensuite utiliser diag from Test::More pour envoyer des commentaires dans le TAP ou the warn builtin.

use Test::More; 

pass 'first test'; 
diag 'this is a diagnostical message'; 

my $res = pass 'another test'; 
warn $res; 

done_testing; 

qui produit cette sortie (sous Windows):

$ prove -v foo.pl 
foo.pl .. # this is a diagnostical message 

1 at foo.pl line 7. 
ok 1 - first test 
ok 2 - another test 
1..2 
ok 
All tests successful. 
Files=1, Tests=2, 0 wallclock secs (0.02 usr + 0.02 sys = 0.03 CPU) 
Result: PASS 

Cependant, ce que je fais habituellement est d'utiliser la fonction de pData::Printer, qui écrit également STDERR comme un avertissement. C'est un peu plus puissant que Data :: Dumper et affiche bien les objets. La sortie de débogage de p se terminera également quelque part dans le TAP.

Il peut être déroutante s'il y a beaucoup de l'exploitation forestière de l'application en cours, afin d'éteindre le journal de Catalyst est une option. Pour ce faire, exécutez vos tests avec la variable d'environnement CATALYST_DEBUG définie sur 0.

$ CATALYST_DEBUG=0 prove -v t/ 

Si au contraire vous voulez que votre sortie de débogage du test aller dans le journal de Catalyst, vous devez saisir un contexte. C'est un peu plus compliqué, mais possible.

use Test::More 
use Test::WWW::Mechanize::Catalyst; 
use Catalyst::Test 'MyApp'; 
use Data::Printer; 

my $mech = Test::WWW::Mechanize::Catalyst->new(catalyst_app => 'MyApp'); 

$mech->get_ok("/"); 

my($res, $c) = ctx_request('/'); 
$c->log->warn(np $res); # this will go to the Catalyst log 

Ce code utilise à la fois Test::WWW::Mechanize::Catalyst et Catalyst::Test. Si vous passez le même nom d'application, ils ne se gêneront pas et l'application ne sera lancée qu'une seule fois.

Je montre un test mech régulier avec get_ok et la fonction ctx_request de Catalyst :: Test. Il renvoie un objet HTTP :: Response et le contexte $c à partir de cette requête. Vous pouvez exécuter ->log sur le contexte et votre débogage ira dans le journal Catalyst. J'utilise np de Data :: Printer, qui renvoie les informations de débogage générées par Data :: Printer au lieu de l'écrire dans STDOUT pour que je puisse le mettre dans le journal Catalyst.

+0

Je n'ont pas accès à un catalyseur en ce moment. Je vais réviser cela une fois que je le ferai. – simbabque

+0

vous êtes le mien champion simbabque, -v fait la magie. Merci encore –

+0

simbabque, merci encore pour le partage de si bonnes informations. –