Pokrycie kodu dla Jest

131

Czy istnieje sposób na pokrycie kodu we frameworku testowym Javascript Jest zbudowanym na bazie Jasmine?

Wewnętrzna struktura nie wyświetla pokrycia kodu, jaki otrzymuje. Próbowałem też używać Istanbul , blanket i JSCover , ale żaden z nich nie działa.

Alex Palcuie
źródło
Nie lubię żartów, ale czy widziałeś config.collectCoverage ?
Ciro Costa

Odpowiedzi:

123

Używając Jest 21.2.1 , widzę pokrycie kodu w wierszu poleceń i tworzę katalog pokrycia, przechodząc --coveragedo skryptu Jest. Poniżej kilka przykładów:

Zwykle instaluję Jest lokalnie, w takim przypadku polecenie może wyglądać tak:

npx jest --coverage

Zakładam (choć nie potwierdziłem), że zadziałałoby to również, gdybym zainstalował Jest globalnie:

jest --coverage

Bardzo nieliczne dokumenty są tutaj

Kiedy przeszedłem do katalogu pokrycia / lcov-report , znalazłem plik index.html , który można było załadować do przeglądarki. Zawierał informacje wydrukowane w wierszu poleceń, a także dodatkowe informacje i niektóre dane wyjściowe graficzne.

ccalvert
źródło
7
Nigdy nie używaj modułów globalnych. Aby zapewnić spójność wersji i obecność pakietu, zawsze używaj pliku wykonywalnego w node_modulesvia ./node_modules/.bin/jest --coverage. Dopóki pakiet jest nazwany w package.json, możesz zagwarantować wykonanie z dokładną wersją żartu, jakiej oczekujesz.
taystack
Jak uzyskać pokrycie tylko dla zmienionych plików?
Shanika Ediriweera
Czy istnieje łatwy sposób na niepowodzenie testów, jeśli pokrycie jest poniżej określonego limitu? Odpowiednie pytanie SO: stackoverflow.com/questions/60512167/…
Stefan
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
88

AKTUALIZACJA: 20.07.2018 - Dodano łącza i zaktualizowaną nazwę dla raportów zasięgu.

AKTUALIZACJA: 14.08.2017 - Ta odpowiedź jest całkowicie nieaktualna. Spójrz tylko na dokumenty Jest teraz. Mają oficjalne wsparcie i dokumentację, jak to zrobić.

@hankhsiao ma rozwidlone repozytorium, w którym Istambuł współpracuje z Jest. Dodaj to do swoich zależności deweloperskich

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Upewnij się również, że w Twoim wpisie package.json jest włączone pokrycie i możesz również określić żądane formaty. (HTML jest dość kiepski).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

Zobacz dokumentację Jest dla raportów pokrycia (domyślnie ["json", "lcov", "text"])

Lub dodaj, --coveragegdy przywołujesz żart.

Adrian Adkison
źródło
1
Usunięto opcję CoverFormats - za każdym razem generowane są pliki json i html.
1
Używam opcji --coverage, ale absolutnie nic się nie dzieje.
gbbr
3
Jest (teraz) wywołany, coverageReportersa wartość domyślna to ["json", "lcov", "text"]. Zobacz facebook.github.io/jest/docs/…
Karsten S.
nie działa, znaleziono nieznaną opcję „pokryciaFormaty” o wartości [„json”, „html”].
srghma
40

Styczeń 2019: Jest wersja 23.6

Dla każdego, kto ostatnio zastanawiał się nad tym pytaniem, zwłaszcza jeśli testuje się przy użyciu npmlub yarnbezpośrednio

Obecnie nie musisz zmieniać opcji konfiguracyjnych

Zgodnie z oficjalną stroną internetową możesz wykonać następujące czynności, aby wygenerować raporty pokrycia:

1- Dla npm:

Musisz postawić --przed przekazaniem --coverageargumentu żartu

npm test -- --coverage

jeśli spróbujesz wywołać --coveragebezpośrednio bez polecenia, --to nie zadziała

2- W przypadku przędzy:

Możesz przekazać --coverageargument żartu bezpośrednio

yarn test --coverage
Ahmed Elkoussy
źródło
1
Jak uzyskać pokrycie tylko dla zmienionych plików?
Shanika Ediriweera
Zmiana od kiedy? Prawdopodobnie chcesz użyć do tego --watchustawienia.
koehn
1
Ta odpowiedź zawiera wiele założeń dotyczących stanu jedności package.json.
airtonix
6

W porządku, zignoruj ​​moją poprzednią odpowiedź, ponieważ ktoś powiedział mi, że to nie rozwiązało problemu.

Nowa odpowiedź:

1) Sprawdź najnowszy żart (v 0.22): https://github.com/facebook/jest

2) Zespół na Facebooku umieszcza Stambuł jako część raportu o zasięgu i możesz z niego korzystać bezpośrednio.

3) Po wykonaniu dowcipu możesz pobrać raport pokrycia na konsoli, aw katalogu głównym ustawionym przez żart znajdziesz raport pokrycia w formacie json i html.

4) FYI, jeśli zainstalujesz z npm, możesz nie dostać najnowszej wersji; więc najpierw wypróbuj github i upewnij się, że zasięg jest tym, czego potrzebujesz.


Stara odpowiedź:

Mam też ten sam problem. Krótka odpowiedź brzmi: Istanbuli JestNIE pracują razem.

Sprawdź następujące strony, aby uzyskać szczegółowe informacje:

https://github.com/facebook/jest/issues/101

jest używa contextify, który uruchamia skrypty JS w kontekście V8 w kodzie natywnym, pomijając w ten sposób wszystkie punkty zaczepienia wymagania i vm.runInThisContext w Stambule. Tak więc okładka istanbul nie będzie działać, ponieważ nie są używane standardowe funkcje node.js z możliwością zaczepienia, a pliki pre-instrumenting również nie pomogą, ponieważ każdy test działa we własnej piaskownicy i nie ma globalnego, w którym można przechowywać obiekt pokrycia.

@Ciro Costa: config.collectCoverageNIE działa, ponieważ jest to funkcja „TODO”. Sprawdź kod źródłowy.

Zimy
źródło
Pytanie brzmiało, jak uzyskać pokrycie kodu dla Jest. To, że Istambuł i Jest nie współpracują ze sobą, może być prawdą, ale to nie odpowiada na pytanie.
David Raab
0

Jeśli masz problem z niedziałającym --coverage, może to być również spowodowane włączeniem raportów pokrycia bez dodawania „tekstu” lub „podsumowania tekstu”. Z dokumentacji: „Uwaga: ustawienie tej opcji powoduje nadpisanie wartości domyślnych. Dodaj„ tekst ”lub„ podsumowanie tekstu ”, aby wyświetlić podsumowanie pokrycia w wynikach konsoli”. Źródło

thebkr7
źródło
0

Skonfiguruj plik package.json

"test": "jest --coverage",

wprowadź opis obrazu tutaj

Teraz biegnij:

yarn test

Rozpocznie się cały test i otrzymasz raport. wprowadź opis obrazu tutaj

Saif Siddiqui
źródło
-1

Miałem ten sam problem i naprawiłem go jak poniżej.

  1. zainstaluj przędzę npm install --save-dev yarn
  2. zainstaluj jest-cli npm install --save-dev jest-cli
  3. dodaj to do pliku package.json "jest-coverage": "yarn run jest -- --coverage"

Po napisaniu testów uruchom komendę npm run jest-zasięg. Spowoduje to utworzenie folderu pokrycia w katalogu głównym. /coverage/icov-report/index.html zawiera widok HTML pokrycia kodu.

Miłego kodowania!

Laksh
źródło
8
Nie ma potrzeby zakładania przędzy. Yarn to po prostu inny menedżer pakietów niż NPM
Black
-10

Spróbuj Chucpah . Właśnie go użyłem. Pisałem na blogu o tym, jak zintegrować się z Visual Studio.

Tak zrobiłem pokrycie kodu w Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/

francorobles
źródło
Chutzpath jest zbudowany na wierzchu Blanketa i powyżej wskazałem, że Jest z nim nie działa.
Alex Palcuie
Ciekawe, ponieważ mój właśnie działał. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Nie używasz Jest, który domyślnie szydzi każdy require.
Alex Palcuie,