2011-06-29 14 views
8

मुझे www मशीनीकरण के लिए स्क्रिप्ट ऐप सेट करने के सही तरीके से यकीन नहीं है। मैंने कम से कम एक वैकल्पिक कोशिश की जो काम करता है, हालांकि मैं परीक्षण के साथ कॉन्फ़िगरेशन में पास करने की कोशिश कर रहा हूं ताकि मैं टेस्ट सूट के साथ लॉगिंग को शांत कर सकूं।टेस्ट :: डब्ल्यूडब्ल्यूडब्ल्यू :: मैकेनाइजेशन :: पीएसजीआई के साथ मैं डांसर एप्लिकेशन का परीक्षण कैसे कर सकता हूं?

#!/usr/bin/perl 
use strict; 
use warnings; 
use Dancer qw(:syntax); 
use MyApp; 
use Test::More; 
use Test::WWW::Mechanize::PSGI; 
set apphandler => 'PSGI'; 
set log => 'warning'; 
set logger => 'note'; 

my $mech = Test::WWW::Mechanize::PSGI->new(
    app => dance, # app => do('bin/app.pl'), # 
); 

$mech->get_ok('/login') or diag $mech->content; 
done_testing; 

स्क्रिप्ट पर do चल परीक्षण चलाने की अनुमति दे रहा है, लेकिन प्रवेश चर सही सेट नहीं हैं और एक ही समय में लगता है कि वहाँ ऐसा करने के लिए एक बेहतर तरीका होगा।

अद्यतन

मुझे लगता है कि मैं एक समाधान के करीब हो रही हो सकता है ...

#!/usr/bin/perl 
use strict; 
use warnings; 
use FindBin; 
use Cwd qw(realpath); 
use Dancer qw(:syntax); 
use MyApp; 
use Test::More; 
use Test::WWW::Mechanize::PSGI; 
set apphandler => 'PSGI'; 

my $appdir = realpath("$FindBin::Bin/.."); 
my $mech = Test::WWW::Mechanize::PSGI->new(
    app => sub { 
     my $env = shift; 
     setting(
      appname => 'MyApp', 
      appdir => $appdir, 
     ); 
     load_app 'MyApp'; 
     config->{environment} = 'test'; # setting test env specific in test.yml detected ok 
     Dancer::Config->load; 
     my $request = Dancer::Request->new(env => $env); 
     Dancer->dance($request); 
    } 
); 

$mech->get_ok('/login') or diag $mech->content; 


done_testing; 

मैं Plack PSGI के लिए Dancer::Deployment documentation से ले लिया। हालांकि, मुझे परीक्षण से 500 त्रुटि मिल रही है।

t/001-login.t .. Subroutine main::pass redefined at t/001-login.t line 8 
Prototype mismatch: sub main::pass: none vs (;$) at t/001-login.t line 8 
Use of uninitialized value $_[0] in join or string at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/5.14.1/i686-linux/File/Spec/Unix.pm line 86. 

# [2462] debug @0.004442> [hit #1]Adding mysql_enable_utf8 to DBI connection params to enable UTF-8 support in /home/ccushing/perl5/perlbrew/perls/perl- 5.14.1/lib/site_perl/5.14.1/Dancer/Plugin/Database.pm l. 148 
# [2462] debug @0.117566> [hit #1]Adding mysql_enable_utf8 to DBI connection params to enable UTF-8 support in /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer/Plugin/Database.pm l. 148 
# [2462] error @0.148703> [hit #1]request to /login crashed: '/login/default.tt' doesn't exist or not a regular file at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer.pm line 161 in /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer/Handler.pm l. 84 
# <h2>runtime error</h2><pre class="error">&#39;/login/default.tt&#39; doesn&#39;t exist or not a regular file at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer.pm line 161 

डीबीआई त्रुटियां यहां प्रासंगिक नहीं हैं, लेकिन त्रुटि आउटपुट का उनका हिस्सा मुझे मिलता है। मुझे पता नहीं लगा कि यह /login/default.tt क्यों नहीं मिल रहा है। मुझे लगता है कि यह समस्या है कि यह पता नहीं है कि मेरे विचार फ़ोल्डर प्रश्न में टेम्पलेट के रूप में views/login/default.tt पर हैं। यह दृश्य plackup पर चलते समय भी ब्राउज़र में ठीक काम करता है। मैं उलझन में हूं।

उत्तर

3

यह परिस्थिति है कि मैं सिमलिंक t/viewsviews लिए मैं वर्तमान में विश्वास है कि यह शायद एक बग का परिणाम है के तहत काम करता है, इसलिए मैं एक here दायर किया, और this test case repository बनाया।

#!/usr/bin/perl 
use strict; 
use warnings; 
BEGIN { 
    use Test::More; 
    use namespace::clean qw(pass); 
} 
use FindBin; 
use Cwd qw(realpath); 
use Dancer qw(:syntax); 
#use MyApp; 
use Test::WWW::Mechanize::PSGI; 
set apphandler => 'PSGI'; 

my $appdir = realpath("$FindBin::Bin/.."); 
my $mech = Test::WWW::Mechanize::PSGI->new(
    app => sub { 
     my $env = shift; 
     setting(
      appname => 'MyApp', 
      appdir => $appdir, 
     ); 
     load_app 'MyApp'; 
     config->{environment} = 'test'; 
     Dancer::Config->load; 
     my $request = Dancer::Request->new(env => $env); 
     Dancer->dance($request); 
    } 
); 

$mech->get_ok('/') or diag $mech->content; 

done_testing; 

मैंने लॉगर सेट किया और environments/test.yml में लॉग इन किया।

मुझे अभी भी ये त्रुटियां मिलती हैं, और मैं उन्हें निश्चित रूप से देखना चाहता हूं लेकिन यह सुनिश्चित नहीं करता कि उनका क्या कारण है।

Use of uninitialized value $_[0] in join or string at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/5.14.1/i686-linux/File/Spec/Unix.pm line 86. 
Use of uninitialized value $path in -e at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer/FileUtils.pm line 46. 
Use of uninitialized value in index at /home/ccushing/perl5/perlbrew/perls/perl-5.14.1/lib/site_perl/5.14.1/Dancer/Renderer.pm line 160. 

उम्मीद है कि कोई मुझे बेहतर जवाब दे सकता है जितना कि मैं हथियाने में सक्षम हूं।

+0

अपनी प्रतिक्रिया स्वीकार करते हुए क्योंकि अब यह काम करता है, उम्मीद है कि किसी दिन कोई बेहतर कुछ प्रदान करने में सक्षम होगा। – xenoterracide

संबंधित मुद्दे