如何使用Devel :: Cover with prove?

Бер*_*ров 8 perl

我看到这里和http://www.perlmonks.org上有一些类似的问题,但我仍然没有得到它.想象一下,我有一个带有'lib /'和't'目录的项目.我用'证明'来运行我的测试:

$ cd $PROJECT_ROOT
$ prove ./*.t
Run Code Online (Sandbox Code Playgroud)

我想在html中获取"lib /"目录中的一个或多个文件的报告.我不想要报告"t"目录中的文件.一个简单的例子就足够了.谢谢

dax*_*xim 7

  1. perl Makefile.PL 要么 perl Build.PL
  2. cover -test


Dal*_*aen 5

正确的方法是始终使用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适用Somethingprove自身并且不会传递它(与-I不同).