2012-06-26 9 views
8

Veo que hay algunas preguntas similares aquí y en http://www.perlmonks.org pero todavía no lo entiendo. Imagine que tengo un proyecto con directorios 'lib /' y a 't'. Paso los ensayos con 'probar':Cómo usar Devel :: ¿Cubrir con probar?

$ cd $PROJECT_ROOT 
$ prove ./*.t 

quiero obtener un informe en formato html para uno o más archivos en el directorio 'lib /'. No quiero informes para los archivos en el directorio 't'. Un simple ejemplo debería ser suficiente. Gracias

Respuesta

6
  1. perl Makefile.PL o perl Build.PL
  2. cover -test
+0

No es un proyecto distribuible. solo hay un directorio "lib" lleno de * .pm y una "t" Sin makefiles. –

+1

@Berov, tuve el mismo problema y la sugerencia de Daxim es correcta. Todavía puede agregar un esqueleto Makefile.PL o Build.PL a su proyecto y luego obtener su informe de cobertura. Si ayuda, contacté con el autor de Devel :: Cover y confirmó que esta es la manera de hacerlo. – oalders

+0

Sorprendentemente, funcionó bien. Creé un Makefile.PL escueto, ejecuté una versión de prueba, y ahora tengo un conjunto exhaustivo de páginas HTML en la carpeta cover_db. Quien supondría que sería tan simple ... Muchas gracias. –

4

La forma adecuada es comenzar siempre con Makefile.PL/Build.PL, tal como sugiere respuesta seleccionada. Sin embargo, a veces no es el que comenzó, así que ...

Yo solía hacer un makefile falsa:

% cat Makefile 
test: 
     prove -Ilib -r t 

Lo siguiente también parece funcionar (w/o tocar cualquier archivos en el disco):

cover -t -make 'prove -Ilib -r t; echo >/dev/null' 

es un truco feo y sin embargo puede dejar de funcionar si los autores de la cubierta deciden citar -hacer opción más estricta. Además, no debería funcionar en Windows. Ojalá cover tuviera una opción -prove en su lugar.

Este sigue generando cobertura para * .t y módulos CPAN en ubicaciones no estándar. Este comportamiento se puede solucionar con seleccionar +/+ ignoran opciones (véase la Devel::Cover's manpage):

cover -t +select ^lib +ignore^

Así que el tl; dr comando "mágica" es

cover -t +select ^lib +ignore^-make 'prove -Ilib -r t; exit $?' 

EDITAR El siguiente no lo hizo trabajo para mí - que sólo imprime breve resumen:

PERL5OPT="$PERL5OPT -MDevel::Cover" prove -Ilib -r t 
cover -t +select ^lib +ignore^

Tenga en cuenta que se aplica prove -MSomethingSomething-prove y no la pasa (a diferencia de -I).

+1

Recomiendo usar -hacer 'probar -v -Ilib; devuelve $ ?; ' ... en lugar de "eco", de lo contrario las fallas de prueba no causan un código de salida distinto de cero. –

+0

En realidad, hacer 'probar -v -Ilib; salir $ ?; ' de lo contrario, falla en bash; solo puede 'devolver 'desde una función o guión fuente. Funciona en la mayoría de las otras conchas. –

+0

@ChrisLamb Actualizado según sus comentarios. – Dallaylaen

Cuestiones relacionadas