Если вы тестируете правильно сформированный дистрибутив, вы должны использовать:
use lib $*PROGRAM.parent(2);
Указав use lib
на каталог, содержащий ваш META6.json, а не на каталог lib
, вы обеспечите актуальность предоставленной записи в файле META6.json (поскольку файлы не перечислены в META6.json). но что действительно существует внутри lib
, не будет видно).
( Я бы даже сделал еще один шаг вперед и сказал бы, что вообще не используйте use lib '...'
, а вместо этого запустите свои тесты, используя perl6 -I ...
. Например, что делать, если вы хотите запустить эти тесты (по какой-либо причине) на установленной копии какого-либо дистрибутива? )
При этом вы можете пропустить рекурсию каталога, используя данные META6. Один из методов - это чтение непосредственно META6.json, но лучший способ сделать это - получить имена модулей из самого дистрибутива:
# file: zef/t/my-test.t
# cwd: zef/
use lib $*PROGRAM.parent(2); # or better: perl6 -I. t/my-test.t
use Test;
my $known-module = CompUnit::DependencySpecification.new(short-name => "Zef");
my $comp-unit = $*REPO.resolve($known-module);
my @module-names = $comp-unit.distribution.meta<provides>.keys;
use-ok($_) for @module-names;