jasmine - Chutzpah-konfigurasjon for å kjøre TypeScript-tester både i Visual Studio og Visual Studio Team Services build
Vi har en Visual Studio 2013-løsning for en AngularJS-applikasjon, skrevet i TypeScript. Det er et eget testprosjekt for Jasmine-enhetstestene, også skrevet i TypeScript.
Det vi har problemer med, er å finne en build/Chutzpah-konfigurasjon som lar oss kjøre testene på utviklingsmaskiner via Chutzpah testadapteren, og også som en del av vår CI-build på Visual Studio Team Services.
Når vi kjører testene på utviklingsmaskiner, ser det ut til at som standard kjører testene i kildekatalogen, slik at avhengighetene til .d.ts og applikasjonens .ts-filer er satt opp relativt til kildekatalogen. Så langt, så bra. Men når vi kjører Visual Studio Team Services build (oppsatt etter denne bloggposten), ser det ut til at testene kjører i bin-katalogen (ser på Visual Studio Team Services-loggene). Dette betyr at referansene for avhengigheter er feil, så testene feiler fordi de ikke kan finne de nødvendige .d.ts- eller applikasjonens .ts-filene.
Den beste løsningen på dette vi har funnet så langt er denne:
- Sett Chutzpah.json til 'Kopier alltid' slik at den kopieres til bin-katalogen
- Ha alle test .ts-filer satt til TypeScriptCompile/Kopier alltid
- Ha alle test .d.ts-filer satt til Innhold/Kopier alltid (f.eks. jasmine.d.ts)
- Ha alle .ts-filer i applikasjonsprosjektet satt til TypeScriptCompile/Copy alltid
- Oppdater testfilavhengigheter for å inkludere ytterligere chutzpah_reference som vil være korrekt for bin-mappen (ved å bruke chutzpah_reference betyr det at VS lokal bygg fortsatt vil fullføres uten feil)
Vi kan deretter kjøre testene i VS på to måter:
- fra VS-testkjøreren som normalt
- ved å vise alle filer, finn bin/Tests-mappen og høyreklikk og velg 'Kjør JS-tester' (dette er en ganske god indikasjon på at testene vil kjøre korrekt på TFS, forutsatt at byggedefinisjonen, CI og .runsettings er korrekt konfigurert).
Vi prøvde også å omdirigere JS-utdataene til bin-mappen, noe som fungerte greit i VS, men VS Team Services-byggingen klarte av en eller annen grunn ikke å kopiere .js-filene.
Ideelt sett ønsker vi:
- for å unngå å måtte kopiere .ts-filer til utdata-mappen
- for å unngå å måtte legge til ekstra referanser spesielt for bin-mappen.
- å bruke Chutzpah Compile Mode External (siden VS allerede kompilerer TypeScript-en vår)
Svar #1
Jeg vet ikke om dette svaret fortsatt er relevant for deg, men det kan også være nyttig for andre. Vel, la oss starte med TypeScript og Team Services. Ideelt sett vil du bare ha TypeScript-filene dine sjekket inn i Team Services. Team Services trenger å bygge TypeScript til JavaScript, noe som enkelt kan oppnås ved bare å legge til et Visual Studio Build-steg for det aktuelle prosjektet. Merk at prosjekter som inneholder TypeScript også har ekstra TypeScript-innstillinger i csproj-filen deres. Dette gjelder også for enhetstester. Du bør bygge enhetstestene i Team Services til vanlig JavaScript.
Det andre du må gjøre er å sette opp testmiljøet riktig. Det betyr at du må laste ned 2 tillegg, nemlig Chutzpah Test Adapter og Chutzpah Test Runner. Disse tilleggene lar deg kjøre (med kode dekning) og feilsøke enhetstestene dine. Chutzpah bruker PhantomJS som en in-memory nettleser for å kjøre enhetstestene dine. Vel, disse tilleggene har ingenting å gjøre med Team Services. Disse tilleggene gjelder bare for ditt lokale utviklingsmiljø. Vel, det er et problem. Vi kan fikse det ved å installere Chutzpah NuGet-pakken. Denne NuGet-pakken laster ned alle avhengigheter til din pakkemappe, det betyr at den laster ned PhantomJS, men også QUnit, Jasmine og kode dekningsbiblioteker. Det betyr at du ikke lenger trenger å referere til dem i prosjektet ditt. Bare slett dem fra prosjektet ditt. Du kan deretter legge til en chutzpah.json-konfigurasjonsfil. I den filen kan du sette opp test-rammeverket ditt (jasmine, qunit, osv.) og de refererte filene for enhetstestene dine. Men også filer som bør ekskluderes fra kodedekning, for det meste bibliotekene dine som jQuery og Angular. Når du har gjort det, bør du fortsatt kunne kjøre enhetstestene dine i utviklingsmiljøet, så langt alt godt. Vi satte ikke opp noe for enhetstesting i Team Services.
Vel, det er den siste delen. I byggflyten din bør du legge til et ekstra trinn for JavaScript-enhetstesting. Du kan ikke slå det sammen med .NET-enhetstesting siden en annen adapter brukes, og andre samlinger refereres også som testsamlinger. I det byggtrinnet må du definere 3 ting, nemlig Test-samlingen, VS Test-versjonen og banen til tilpassede testadaptere. Du bør sette inn følgende verdier:
- Testassemblen bør være: **\*.tests.js
Alle filer som slutter på .tests.js er merket som testfil.
- VS Test-versjon: Nyeste
Bare den nyeste testversjonen av Team Services støtter de nye testadapterne.
- Sti til egendefinerte testadaptere: $ (Build.SourcesDirectory)\packages
Dette er mappen der dine NuGet-pakker lastes ned til. Chutzpah Test-adapteren er i en undermappe av denne mappen.
Vel, det er omtrent det, forhåpentligvis hjelper dette.