testing - Perl6 通用代码来测试模块是否加载
问题描述
这是/t中的通用代码代码,用于测试/lib中的 .pm6 模块是否加载。
use lib $*PROGRAM.sibling('../lib');
use Test;
my @dir = dir($*PROGRAM.sibling('../lib'), test => { $_ ~~ /.*pm6/ } );
plan @dir.elems;
sub module( IO $dir ) {
$dir.basename.Str ~~ /(\w+)\.pm6/;
return $0.Str;
}
for @dir.map(&module) -> $module {
use-ok $module, "This module loads: $module";
}
在继续之前(递归查看 lib 子文件夹),我想知道这是正确的方法。
谢谢!
解决方案
如果您正在测试格式良好的分布,那么您应该使用:
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;
推荐阅读
- asp.net-core-mvc - 一切正常时如何修复错误无数据库提供程序
- shell - 基于 Pattern 的 Grep 和 Split - shell 脚本
- javascript - jquery popups实例重复问题
- c - 在函数中传递结构
- vue.js - API 的 Auth0 访问令牌在邮递员中有效,但在从 Vue 调用时无效
- r - 如何添加 1) 每 3 行数据框添加唯一标识符
- c# - 如何使用 C# 从 Azure Active Directory 组中获取所有用户
- php - 使用 PHP 邮件处理程序提交表单后如何刷新页面
- tensorflow - 计算机视觉的深度学习:MNIST 阶段之后是什么?
- python - pcpp预处理器API怎么用?