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
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 p
Data::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.
Je n'ont pas accès à un catalyseur en ce moment. Je vais réviser cela une fois que je le ferai. – simbabque
vous êtes le mien champion simbabque, -v fait la magie. Merci encore –
simbabque, merci encore pour le partage de si bonnes informations. –