我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然没有得到它.想象一下,我有一个带有'lib /'和't'目录的项目.我用'证明'来运行我的测试:
$ cd $PROJECT_ROOT
$ prove ./*.t
Run Code Online (Sandbox Code Playgroud)
我想在html中获取"lib /"目录中的一个或多个文件的报告.我不想要报告"t"目录中的文件.一个简单的例子就足够了.谢谢
正确的方法是始终使用Makefile.PL/Build.PL,就像选择的答案所示.但是,有时你不是那个刚开始的人,所以......
我曾经制作过伪造的文件:
% cat Makefile
test:
prove -Ilib -r t
Run Code Online (Sandbox Code Playgroud)
以下似乎也有效(无需触摸磁盘上的任何文件):
cover -t -make 'prove -Ilib -r t; exit $?'
Run Code Online (Sandbox Code Playgroud)
这只能起作用,因为perl system
/ 如何exec
处理带有shell元字符的参数(;
在本例中),如果cover
决定更严格地引用它,将来可能会中断.它也不应该在Windows下工作.我希望cover
有一个-prove
选择.
这个仍然可以生成*.t的覆盖范围以及非标准位置的CPAN模块.可以使用+ select/+ ignore选项修复此行为(请参阅Devel :: Cover的联机帮助页):
cover -t +select ^lib +ignore ^
Run Code Online (Sandbox Code Playgroud)
所以tl; dr"魔术"命令是
cover -t +select ^lib +ignore ^ -make 'prove -Ilib -r t; exit $?'
Run Code Online (Sandbox Code Playgroud)
编辑以下对我不起作用 - 它只打印简短摘要:
PERL5OPT="$PERL5OPT -MDevel::Cover" prove -Ilib -r t
cover -t +select ^lib +ignore ^
Run Code Online (Sandbox Code Playgroud)
请注意,它prove -MSomething
适用Something
于prove
自身并且不会传递它(与-I不同).