2012-06-26 8 views
8

Widzę, że istnieje kilka podobnych pytań tutaj i na http://www.perlmonks.org, ale nadal nie rozumiem. Wyobraź sobie, że mam projekt z katalogami "lib /" i "t". Biegnę moje testy z „udowodnić”:Jak korzystać z Devel :: Cover with prove?

$ cd $PROJECT_ROOT 
$ prove ./*.t 

Chcę dostać raport w HTML dla jednego lub więcej plików w katalogu „lib /”. Nie chcę raportów dla plików w katalogu 't'. Prosty przykład powinien wystarczyć. Dzięki

Odpowiedz

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

To nie jest projekt do rozpowszechniania. istnieje tylko katalog "lib" pełen * .pm i "t" Brak plików Makefile. –

+1

@Berov, miałem ten sam problem i sugestia Daxima jest prawidłowa. Nadal można dodać szkielet Makefile.PL lub Build.PL do projektu, a następnie uzyskać raport o zasięgu. Jeśli to pomaga, skontaktowałem się z autorem Devel :: Cover i potwierdził, że jest to sposób, aby to osiągnąć. – oalders

+0

Zadziwiająco to działało dobrze. Stworzyłem plik Makefile.PL gołe kości, uruchomiłem cover -test, a teraz mam wyczerpujący zestaw stron HTML w folderze cover_db. Kto by pomyślał, że będzie tak prosty ... Wielkie dzięki. –

4

Właściwym sposobem jest zawsze rozpocząć się Makefile.PL/Build.PL, tak jak sugeruje wybrana odpowiedź. Czasami jednak nie jesteś jedynym, który rozpoczął się, więc ...

kiedyś zrobić fałszywy makefile:

% cat Makefile 
test: 
     prove -Ilib -r t 

Poniższa również wydaje się działać (w/o dotykania żadnych plików na dysku):

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

jest brzydki hack, jednak i może przestać działać, jeśli autorzy cover zdecydować zacytować -make opcję bardziej surowo. Również nie powinno działać w systemie Windows. Chciałbym, aby cover miał zamiast tego opcję -prove.

Ten nadal generuje pokrycie modułów * .t oraz CPAN w niestandardowych lokalizacjach. Takie zachowanie może być ustalona przy użyciu + select/+ ignorować opcji (patrz Devel::Cover's manpage):

cover -t +select ^lib +ignore^

tak więc tl; dr komenda "magia" jest

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

EDIT Poniższa nie praca dla mnie - to tylko drukuje krótkie podsumowanie:

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

Zauważ, że prove -MSomething stosuje Something do prove sam w sobie i nie przekazuje go (w przeciwieństwie do -I).

+1

Polecam używanie -make 'prove -v -Ilib; return $ ?; ' ... zamiast "echo", w przeciwnym razie błędy testu nie powodują niezerowego kodu wyjścia. –

+0

Właściwie zrób "prove -v -Ilib; zjazd $ ?; " w przeciwnym razie nie powiedzie się w bashu - możesz tylko "zwrócić" z funkcji lub skryptu źródłowego. Działa w większości innych powłok. –

+0

@ChrisLamb Zaktualizowany zgodnie z Twoimi komentarzami. – Dallaylaen