Как я могу сделать эти тесты более сухими? - PullRequest
2 голосов
/ 13 июля 2011

В настоящее время у меня есть следующее в начале нескольких тестовых файлов, но это очень не СУХОЙ. Но я не совсем уверен, что лучший способ перенести это в свой файл. Есть предложения?

#!/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, но это не сработало. Я пытаюсь выяснить, что именно нужно ввести в библиотеку, а что именно нужно пройти в тест.

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

Сделайте его модулем (скажем, t::MyApp), замените my $t на our $t и получите экспорт модуля $t. (Вы также можете написать собственный метод import для включения строгих предупреждений и предупреждений в тестовом скрипте.)

1 голос
/ 13 июля 2011

Вы можете создать модуль .pm, содержащий эти строки, с некоторым объектно-ориентированным кодом для получения $t и другой информации из стандартного кода, а затем use из ваших тестов.

...