Я пишу тестовые примеры для веб-приложения на основе Perl Catalyst с тестом :: WWW :: Механизмом :: Catalyst. Я где-то застрял, и я хочу устранить проблему, напечатав значение переменной/хэша. Но проблема в том, что он просто показывает консольный журнал приложения Catalyst. Как напечатать значение переменной в консоли? как в катализаторе $ c-> log-> info (значение переменной $).Невозможно распечатать переменную/хэш в тестовом примере с помощью теста :: WWW :: Механизм :: Катализатор в приложении для катализатора perl
ответ
При выполнении ваших тестов с помощью prove
вам необходимо добавить флаг -v
, чтобы увидеть весь тестовый результат.
$ prove -v t/
Таким образом, он не будет потреблять весь выход TAP.
Вы можете использовать diag
from Test::More для вывода комментариев в TAP, или the warn
builtin.
use Test::More;
pass 'first test';
diag 'this is a diagnostical message';
my $res = pass 'another test';
warn $res;
done_testing;
Это производит этот выход (на 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
Однако то, что я обычно делаю это, чтобы использовать Data::Printerp
функцию «s, который также записывает STDERR как предупреждение. Это немного более мощный, чем Data: Dumper и хорошо отображает объекты. Отладочный вывод от p
также просто окажется где-то в TAP.
Может возникнуть путаница, если из приложения будет много регистрации, поэтому отключить журнал Catalyst можно. Для этого запустите ваши тесты с переменной окружения CATALYST_DEBUG
, установленной на 0
.
$ CATALYST_DEBUG=0 prove -v t/
Если вместо этого вы хотите, чтобы ваш выход отладки из теста перейти в журнал Catalyst, вы должны захватить контекст. Это немного сложнее, но возможно.
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
Этот код использует как Test::WWW::Mechanize::Catalyst и Catalyst::Test. Если вы передадите одно и то же имя приложения, они не попадут друг в друга, и приложение будет запущено только один раз.
Я показываю обычный мех-тест с get_ok
и функцией ctx_request
от Catalyst :: Test. Он возвращает объект HTTP :: Response и контекст $c
из этого запроса. Вы можете запустить в контексте, и ваша отладка перейдет в журнал Catalyst. Я использую np
из Data :: Printer, который возвращает информацию об отладке, сгенерированную Data :: Printer, вместо того, чтобы записывать ее в STDOUT, поэтому я могу поместить ее в журнал Catalyst.
У меня нет доступа к Catalyst прямо сейчас. Я пересмотрю это, как только я это сделаю. – simbabque
ты мой симбабль, -в сделал волшебство. Еще раз спасибо –
simbabque, еще раз спасибо за обмен хорошей информацией. –