2017-07-07 4 views
1

テストを実行すると、大量のマークアップを含む膨大な出力が表示され、エラーが隠されます。テストのマークアップを削除する

例:

$ perl script/my_prove.pl t/2410-topinfo.t 
t/2410-topinfo.t .. 1/? 
# Failed test '200 OK' 
# at t/2410-topinfo.t line 12. 
#   got: '500' 
#  expected: '200' 

# Failed test 'similar match for selector "h1"' 
# at t/2410-topinfo.t line 12. 
#     '' 
#  doesn't match '(?^:Flatinfo\ Business\-Apartment\ Hietzing)' 

# Failed test 'content is similar' 
# at t/2410-topinfo.t line 12. 
#     '<!DOCTYPE html> 
# <html> 
# <head> 
#  <title>Server error (development mode)</title> 
#  <meta http-equiv="Pragma" content="no-cache"> 
#  <meta http-equiv="Expires" content="-1"> 
#  <script src="/mojo/jquery/jquery.js"></script> 
#  <script src="/mojo/prettify/run_prettify.js"></script> 
#  <link href="/mojo/prettify/prettify-mojo-dark.css" rel="stylesheet"> 
#  <style> 
#  a img { border: 0 } 
#  body { 
# 
# ........... lots of lines removed here ........... 
# 
#  <div id="wrapperlicious"> 
#   <div id="nothing" class="box spaced"></div> 
#   <div id="showcase" class="box code spaced"> 
#   <pre id="error">Can&#39;t call method &quot;name&quot; on an undefined value at template extern/topinfo/show.html.ep line 2. 
# </pre> 
# 
# .... lots of lines follow here ............ 

誤差は、単一の行のようだ:

Can't call method "name" on an undefined value at template extern/topinfo/show.html.ep line 2 

この出力を生成するテスト・スクリプトは次のとおりです。

use Mojo::Base -strict; 

use Test::More; 
use Test::Mojo; 

use FindBin; 
require "$FindBin::Bin/../script/ba_db"; 
my $t = Test::Mojo->new('BaDb'); 
$t->ua->max_redirects(1); 

$t->get_ok('/info/penx2') 
    ->status_is(200) 
    ->text_like('h1' => qr/\QFlatinfo Business-Apartment Hietzing\E/) 
    ->content_like(qr/\QSelected language: German\E/) 
    # ... 
; 
done_testing(); 

への道がありますMoholiciousになしで返信するように指示してください。 nエラーメッセージをすぐに見ますか?

答えて

3

ここには2つのことがあります。

完全なページソースを使用した大きなデバッグ出力は、content_like method from Test::Mojoが一致するものを見つけられなかったので、どの文字列を探しているかを示しています。これは便利な方法ですが、ページが大きければ大量のテキストです。これは、内容が間違っているためにテストが失敗したことを示している可能性があります。しかし、この特定の場合、それはしませんでした。

本当の問題は、構文エラーが原因でテストが失敗したことです。あなたはすでに最初のテストからそれを見ることができます。

$t->get_ok('/info/penx2') 
    ->status_is(200) 

このテストでも失敗しました。 (これは、回答が200 OKだったかどうかを確認するため、get_okもチェックするので、WWW :: Mechanizeをテストするのに戸惑う人にとっては少し混乱します。

# Failed test '200 OK' 
# at t/2410-topinfo.t line 12. 
#   got: '500' 
#  expected: '200' 

それはget_okをしていた一方で、それがアプリケーションログに行っているはずのエラーに遭遇してしまうので、実際のエラーメッセージは、どこか他のすべてのことのHTMLマークアップなしがあるはずです。単体テストではおそらくSTDERRです。

あなたがそれを含めなかったのか、それとも省略されたのか分かりません。ログもそこにあるべきだと私は信じている。バックHTMLと実際の質問に取得


テスト::モジョのcontent_like(およびその方法の他のほとんどの)はボンネットの下にテスト::詳細を使用しているため、それは出力だ理由があります。 It just dispatcheslike from Test::Moreとなり、ページの内容に沿って渡されます。これは順番に、一致していた完全な文字列を表示します。

最近のTest ::より多くのバージョンでは、すでにTest2を使っています。フルストリングを出力する関連部分はhereです。

残念ながら、それについてはあまりできません。私はユニットテスト中に適切なログが表示されない理由を調べることに焦点を当てます(おそらく、-vproveを実行しなかったため)、エラーをカラーで出力する方法を見つけると読むのが簡単です。 a color logger for the Dancer2 framework(私はこれを維持しています)ですが、 Mojo のために1つを見つけることができませんでした。

は、今では、ログ・レベルに基づいて、個々のログ行を着色することができるMojo::Log::Coloredがあります。

use Mojo::Log::Colored; 

# Log to STDERR 
$app->log(
    Mojo::Log::Colored->new(

     # optionally set the colors 
     colors => { 
      debug => "bold bright_white", 
      info => "bold bright_blue", 
      warn => "bold green", 
      error => "bold yellow", 
      fatal => "bold yellow on_red", 
     } 
    ) 
); 

これは、コンソールにあなたに素敵なカラフルな出力が得られます。ここにスクリプト例があります。

$ MOJO_LOG_LEVEL=debug perl -Mojo -MMojo::Log::Colored \ 
    -e 'a(
     "/" => sub { 
      app->log->$_("hello world") for qw/debug info warn error fatal/; 
      shift->render(text=>"ok"); 
     })->log(Mojo::Log::Colored->new)->start' \ 
    daemon 

出力が$ curl localhost:3000の場合は出力されます。

console output

関連する問題