在具有“ MAIN”定义的模块上使用“ use-ok”进行测试

时间:2018-10-09 10:11:31

标签: testing perl6

我正在编写一个新的Perl 6项目以便工作,并希望能够测试是否可以正确use d替换所有零件。为此,我使用了use-ok模块中的Test子例程。我正在尝试使用以下代码轻松测试所有模块文件:

"META6.json".IO.slurp.&from-json<provides>
.grep(*.value.starts-with("lib")).Hash.keys
.map({ use-ok $_ })

我的问题是,有几个文件包含MAIN子例程的定义。从运行prove -e 'perl6 -Ilib' t的输出中可以看到,其中一个文件正在执行MAIN,然后测试停止。

我想测试这些文件是否可以正确use d,而无需实际运行其中定义的MAIN子。我该怎么办?

1 个答案:

答案 0 :(得分:4)

仅当文件MAIN位于程序主线的顶层时才执行。所以:

sub MAIN() is export { }     # this will be executed when the mainline executes

但是,如果将MAIN子项移出顶层,则将执行。但是您可以仍然将其导出。

{
    sub MAIN() is export { } # will *not* execute
}

很抱歉,回答了这么长时间:我花了一段时间才弄清楚问题是什么:-)