Как проверить мой модуль, который использует File :: ShareDir? - PullRequest
3 голосов
/ 12 марта 2012

Я пишу модуль, который устанавливает общий файл в каталог dist, используя File :: ShareDir :: Install . Внутри основной экспортируемой функции в модуле файл затем располагается с помощью File :: ShareDir .

Эта функция загружает общий файл и ищет строку в файле. В одном из моих тестов я хотел проверить, вернула ли функция правильные значения для нескольких входных данных. Итак, тест выглядит так:

my @cases = (
    [ 'input1' => 'expected1' ],
    # etc
);

for my $case ( @cases ) {
    my ($input, $expected) = @$case;
    is(
        my_lookup_function($input),
        $expected,
        "$input => $expected",
    );
}

Однако тест не запускается, потому что

my $dir = dist_dir('My-Dist');

хрипит.

Мой Makefile.PL кажется правильным, потому что я могу найти файл общего доступа в blib. Я просто не знаю, что мне нужно сделать, чтобы получить вызов File::ShareDir::dist_dir в моем модуле, чтобы найти этот каталог во время тестирования.

Я посмотрел на Test :: File :: ShareDir , но я не понимаю, можно ли его использовать для выполнения того, что я пытаюсь сделать.

Буду признателен, если вы скажете мне, как добиться желаемого поведения с текущей настройкой, или предложите способы сделать что-то по-другому (и предположительно правильно; -)

Ответы [ 2 ]

2 голосов
/ 08 ноября 2014

Вы можете использовать модуль Test :: File :: ShareDir , чтобы указать вашим тестам, где искать файлы ShareDir.

Из документации:

use Test::More;

# use FindBin; optional

use Test::File::ShareDir
    # -root => "$FindBin::Bin/../" # optional,
    -share => {
        -module => { 'My::Module' => 'share/MyModule' }
        -dist   => { 'My-Dist'    => 'share/somefolder' }
    };

use My::Module;

use File::ShareDir qw( module_dir dist_dir );

module_dir( 'My::Module' ) # dir with files from $dist/share/MyModule

dist_dir( 'My-Dist' ) # dir with files from $dist/share/somefolder
2 голосов
/ 12 марта 2012

у меня работает.

perl Makefile.PL ; make
make test
prove -b

$ tree
.
├── Makefile.PL
├── share
│   └── quux
└── t
    └── foo.t

2 directories, 3 files

$ cat Makefile.PL
use ExtUtils::MakeMaker;
use File::ShareDir::Install;

install_share 'share';
WriteMakefile;

package MY;
use File::ShareDir::Install qw(postamble);


$ cat t/foo.t
use File::ShareDir qw(dist_dir);
use Test::More;

diag dist_dir('My-Dist');

pass;
done_testing;
...