2011-07-12 38 views
2

我目前在几个测试文件的开头有以下内容,但它不是干的。但我不确定将其移入自己的文件的最佳方式是什么。有什么建议么?如何让这些测试更干?

#!/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 Test::WWW::Mechanize::PSGI; 
set apphandler => 'PSGI'; 

my $appdir = realpath("$FindBin::Bin/.."); 
my $t = 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); 
    } 
); 
$t->agent('test'); 

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

$t->submit_form_ok({ 
    form_name =>'loginform', 
    fields => { 
     username => 'myuser', 
     password => 'foo', 
    }, 
}, 'login ok'); 

### END BOILERPLATE ### 

更新

我的问题与移动这一关到库中的不幸的是,只要我做的代码停止工作。我尝试将它封装到一个子例程中并返回$t,但这似乎不起作用。我试图找出究竟需要进入图书馆的是什么,以及需要进入测试的内容。

+0

“停止工作”是什么意思?怎么了?你有错误信息吗? – cjm

回答

2

使它成为一个模块(比如t::MyApp),改变my $tour $t,并有导出模块$t。 (你也可以写一个自定义的import方法来打开你的测试脚本严格&警告。)

1

您可以创建一个.pm模块,包括这些线路,与一些面向对象的代码以获得来自$t等信息样板代码,然后use它从你的测试。