首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Test::WWW::Mechanize::PSGI测试Dancer应用程序?

如何使用Test::WWW::Mechanize::PSGI测试Dancer应用程序?
EN

Stack Overflow用户
提问于 2011-06-29 21:54:07
回答 1查看 1.2K关注 0票数 8

我不确定如何为www机械化设置脚本应用程序。我确实尝试了至少一个工作的备选方案,但是我正在尝试通过测试的配置,这样我就可以在测试套件中使日志记录更加安静。

代码语言:javascript
复制
#!/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似乎允许运行测试,但是日志变量没有正确设置,同时似乎有更好的方法。

更新

我想我可能更接近解决办法了.

代码语言:javascript
复制
#!/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拍摄的。但是,我从测试中得到了一个500错误。

代码语言:javascript
复制
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

DBI错误在这里不相关,但它们在我获得的错误输出中所占的部分。我不明白为什么它找不到/login/default.tt。我猜想它的问题在于它不知道我的视图文件夹在哪里,因为有问题的模板在views/login/default.tt。即使在plackup上运行,此视图在浏览器中也可以正常工作。我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-30 17:26:24

这在我将t/views链接到views的情况下起作用,我目前认为这可能是错误的结果,所以我提交了一个这里,并创建了这个测试用例存储库

代码语言:javascript
复制
#!/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

我仍然会看到这些错误,我希望看到它们被修复,但不确定它们的原因是什么。

代码语言:javascript
复制
  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.

希望有人能给我一个比我所能提供的更好的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6527730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档