Как я могу легко добавить неустановленные модули Perl из моего каталога разработки в @INC?
Я пишу Perl t/*. T тесты для существующего проекта. Во время разработки я хотел бы использовать команду "доказательства" для запуска выбранных тестов на произвольной глубине в иерархии каталогов модулей. Я создал несколько каталогов t / на той же глубине, что и файлы *.pm, которые я хотел бы проверить. К сожалению, lib/ в основе кода проекта находится не в @INC.
Каков наилучший способ автоматического определения и добавления пути к @INC? Я посмотрел на опцию -b, чтобы доказать и blib в целом, но, похоже, они не работают (они берут pwd, добавляют к нему blib/lib и добавляют его в @INC). В идеале решение не требует переменной среды или установки модулей и будет содержать несколько рабочих копий одного и того же кода.
Мой подход неверен? Есть что-то очевидное, что я упускаю? Модули CPAN, похоже, решают эту проблему путем установки или скопированных блоков кода в верхней части файлов *.t (хм).
Редактировать:
Структура выглядит так:
/home/user/proj/branch\_foo/lib/First/Second/Third.pm
/home/user/proj/branch\_foo/lib/First/Second/t/third.t
Это работает:
~/proj/branch\_foo/lib/First/Second$ prove -I../..
Но я бы хотел:
~/proj/branch\_foo/lib/First/Second$ prove -r
Или же:
~/proj/branch\_foo/lib/First/Second$ prove t/third.t
Так что я могу сделать:
~/proj/branch\_foo/lib$ prove -r
Вместо:
~/proj/branch\_foo/lib$ prove -I. -r
Может быть, я просто должен использовать -I
и справиться с этим.
3 ответа
доказать есть -I
опция командной строки:
-I
Библиотечные пути для включения.
Можете ли вы указать пути, используя эту опцию?
Обновить:
Спасибо за предоставление макета. Сейчас я не могу придумать быстрого решения, но, возможно, вы можете использовать файлы .proverc в соответствующих каталогах, чтобы сократить требуемую печать. Я не уверен, как многократный .proverc
файлы взаимодействуют с -r
вариант, но это то, что нужно посмотреть.
Именно поэтому существует модуль blib. Он просматривает текущий каталог, а затем его родительские каталоги, которые ищут blib/lib для добавления в @INC. Это часть стандартной библиотеки Perl, так что она у вас уже должна быть.
Где-то из t/ вы можете использовать ключ -M для загрузки blib:
% perl -Mblib test.t
Если вы хотите использовать его с доказать
% perl -Mblib prove test.t
Я думаю, что это должно быть то же самое, что и ключ -b в доказательствах, но в прошлый раз, когда я попробовал это (давным-давно), это не сработало. Возможно они исправили это, чтобы работать как blib.pm:
% prove -b test.t
Обратите внимание, что для этого нужно сначала создать дистрибутив, а не тестировать из lib /, но вы все равно должны это делать.:)
Вы можете установить переменную среды PERL5LIB
(как описано в perldoc perlrun
) который вызовет perl
предварять разделенные двоеточием пути к вашему @INC
:
% export PERL5LIB=/absolute/path/to/your/libraries
% cd into/part/of/your/test/suite
% prove -r