【问题标题】:How can I make these tests more DRY?我怎样才能使这些测试更加干燥?
【发布时间】:2011-07-12 22:43:05
【问题描述】:

我目前在几个测试文件的开头有以下内容,但它非常不干燥。但是我不确定将其移入自己的文件的最佳方法是什么。有什么建议吗?

#!/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,但这似乎不起作用。我正试图弄清楚究竟什么需要进入图书馆,以及究竟需要什么进入测试。

【问题讨论】:

  • “停止工作”是什么意思?怎么了?您收到错误消息吗?

标签: perl testing dry dancer


【解决方案1】:

使其成为一个模块(例如t::MyApp),将my $t 更改为our $t,并让模块导出$t。 (您还可以编写一个自定义的import 方法来在您的测试脚本中打开严格和警告。)

【讨论】:

    【解决方案2】:

    您可以创建一个包含这些行的.pm 模块,使用一些面向对象的代码从样板代码中获取$t 和其他信息,然后从您的测试中获取use

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      相关资源
      最近更新 更多