2012-06-26 6 views
8

Vedo che ci sono alcune domande simili qui e su http://www.perlmonks.org ma ancora non capisco. Immagina di avere un progetto con una directory 'lib /' e una 't'. Ho eseguito le mie prove con 'provare':Come utilizzare Devel :: Coprire con prove?

$ cd $PROJECT_ROOT 
$ prove ./*.t 

voglio ottenere un rapporto in formato HTML per uno o più file nella directory 'lib /'. Non voglio report per i file nella directory 't'. Un semplice esempio dovrebbe essere sufficiente. Grazie

risposta

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

Non è un progetto distribuibile. c'è solo una directory "lib" completa di * .pm e una "t" senza makefile. –

+1

@ Berov, ho avuto lo stesso problema e il suggerimento di Daxim è corretto. Puoi ancora aggiungere uno scheletro Makefile.PL o Build.PL al tuo progetto e quindi ottenere il tuo rapporto sulla copertura. Se aiuta, ho contattato l'autore di Devel :: Cover e ha confermato che questo è il modo per farlo. – oalders

+0

Incredibilmente questo ha funzionato bene. Ho creato un Makefile.PL barebone, ho eseguito cover-test, e ora ho un set completo di pagine HTML nella cartella cover_db. CHI immagina che sarà così semplice ... Grazie mille. –

4

Il modo corretto è quello di iniziare sempre con Makefile.PL/Build.PL, proprio come risposta selezionata suggerisce. Tuttavia, a volte non sei quello che ha iniziato, quindi ...

ho usato per fare un makefile falso:

% cat Makefile 
test: 
     prove -Ilib -r t 

Quanto segue sembra anche al lavoro (w/o di toccare qualsiasi file sul disco):

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

e 'un brutto hack comunque e potrebbe smettere di funzionare se gli autori di copertura decidono di citare -Fare opzione più strettamente. Inoltre non dovrebbe funzionare sotto Windows. Vorrei che l'cover avesse invece un'opzione -prove.

Questo genera ancora la copertura per * .t così come i moduli CPAN in posizioni non standard. Questo comportamento può essere risolto utilizzando + selezionare le opzioni/+ ignore (vedere la Devel::Cover's manpage):

cover -t +select ^lib +ignore^

Così il tl; dr comando di "magia" è

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

EDIT Quanto segue non ha lavoro per me - è stampata solo breve riassunto:

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

Nota che prove -MSomething applica Something-prove stesso e non lo passa (diversamente da -I).

+1

Si consiglia di utilizzare -make 'test -v -Ilib; ritorno $ ?; ' ... anziché "echo", altrimenti i test falliti non causano un codice di uscita diverso da zero. –

+0

Effettivamente fai 'prove -v -Ilib; uscita $ ?; ' altrimenti fallisce sotto bash - puoi solo "tornare" da una funzione o da uno script di origine. Funziona nella maggior parte delle altre shell. –

+0

@ChrisLamb Aggiornato in base ai vostri commenti. – Dallaylaen

Problemi correlati