javascript - Kodedekning for Typescript
Vi har akkurat startet et prosjekt i Typescript, og vi trenger å få frem tall for kodedekning.
Våre eksisterende JavaScript-prosjekter bruker Instanbul i Grunt for dekningsmåling. Vi er usikre på hvordan vi kan gjenskape dette for TypeScript.
Finnes det noen verktøy for å generere kodedekning fra TypeScript-koden selv? Eller kjører vi Istanbul (eller lignende) verktøy mot den genererte JavaScript-koden.
Svar #1
På TypeScript-teamet bruker vi bare vanlige kode-dekningsverktøy på den kompilerte JavaScript-koden. Vi har funnet ut at dette er mer enn tilstrekkelig, siden man vanligvis for kode-dekning ser på total dekningsprosent (som ikke endres betydelig) eller dykker dypt ned på uttrykksnivå (som heller ikke endres betydelig).
Hvis du fant et verktøy som støttet det (jeg er ikke kjent med noen ennå), kunne du i teorien bruke source maps som kompilatoren genererer for å kartlegge dekningsdataene tilbake til TypeScript-koden. Det er sannsynligvis ikke verdt bryet.
Svar #2
Oppdatering: august 2016
Det er nå mulig å kjøre Istanbul mot TypeScript-kildekode ved bruk av Istanbul v1 (for tiden i alfa-stadiet) sammen med TypeScript Node.
Følgende forutsetter at du bruker Mocha som test-rammeverk og at all testkode ligger under den vanlige test/-mappen.
Først installer de nødvendige pakkene:
npm install --save-dev mocha ts-node
npm install --save-dev --save-exact [email
Inkluder deretter noe som følgende i din package.json:
"scripts": {
"test": "istanbul cover -e .ts _mocha -- --compilers ts:ts-node/register"
}
Det er det. Kjør npm test så er du dekket.
Se mitt Deep Map-prosjekt for et fungerende eksempel der testfilene holdes i samme katalog som kildekoden. Her er et eksempel på HTML-utdata:
Svar #3
To år etter at dette spørsmålet opprinnelig ble lagt ut, finnes det nå remap-istanbul som ser lovende ut.
du kan lese mer om det på Sitepen: Code Coverage for TypeScript og andre transpilerte språk
Som de skriver i Github-prosjektet:
En pakke som gir muligheten til å kartlegge Istanbul-kode dekningsinformasjon til dens opprinnelige kildeposisjoner basert på en JavaScript Source Maps v3.
Når jeg leser dokumentasjonen, vil prosjektet ta ditt Istanbul-genererte dekningsdata som input for konvertering basert på sourcemap. Dette høres ut som et ekstra steg, men jeg er sikker på at det vil være til fordel slik at du kan bli kvitt de transpilerte autogenererte linjene i dekningsrapporten.
Jeg tror dette er akkurat det du vil trenge.
