2011-07-12 70 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它從你的測試。