Mam projekt Angular2 zbudowany z Angular-CLI (beta 20).
Czy istnieje sposób na uruchomienie testów tylko dla jednego wybranego pliku specyfikacji?
Kiedyś miałem projekt oparty na szybkim uruchomieniu Angular2 i mogłem ręcznie dodawać specyfikacje do pliku jasmine. Ale nie wiem, jak to ustawić poza testowaniem karmy lub jak ograniczyć testy karmy do określonych plików z kompilacjami Angular-CLI.
źródło
fdescribe
lubxdescribe
? Nie chcę, żeby niechlujny recenzent (ja) łączył PR, który pomija wszystkie moje testy.Skonfiguruj
test.ts
plik wsrc
folderze:Zastąp
/\.spec\.ts$/
nazwą pliku, który chcesz przetestować. Na przykład:/app.component\.spec\.ts$/
Spowoduje to uruchomienie testu tylko dla
app.component.spec.ts
.źródło
Możesz przetestować tylko określony plik za pomocą Angular CLI (
ng
polecenie) w następujący sposób:Dalsze dokumenty są dostępne pod adresem https://angular.io/cli/test
Zauważ, że chociaż działa to dla samodzielnych plików bibliotek, nie będzie działać dla komponentów / usług / itp. Dzieje się tak, ponieważ pliki angular mają zależności od innych plików (mianowicie
src/test.ts
w Angular 7). Niestety--main
flaga nie przyjmuje wielu argumentów.źródło
component.spec.ts
plik, zobaczymy, że testy nigdy się nie rozpoczną:Error: AsyncTestZoneSpec is needed for the async() test helper but could not be found. Please make sure that your environment includes zone.js/dist/async-test.js
... Jestem pewien, że dalsze obejście można zhakować razem, ale jest to coś, o czym należy pamiętać ponieważ konfiguracja wykonana w programiesrc/main.ts
i jej importowanie nie są dostępne w tym przypadku.ng t
test, który piszę, przechodzi, ale kiedy uruchamiam określony plik, wyświetla błąd. TypeError: Nie można odczytać właściwości „getComponentFromError” o wartości null w TestBedViewEngine._initIfNeeded (node_modules/@angular/core/fesm2015/testing.js: 3112: 1) w TestBedViewEngine.get (node_modules/@angular/score/fes: 3230: 1) w Function.get (node_modules/@angular/core/fesm2015/testing.js: 2960: 1) w UserContext. <anonymous> (src / app / timebar.service.spec.ts: 14:45) ”Jeśli chcesz mieć możliwość kontrolowania, które pliki są wybierane z wiersza poleceń, udało mi się to zrobić w Angular 7.
Podsumowując, musisz zainstalować,
@angular-devkit/build-angular:browser
a następnie utworzyć niestandardową wtyczkę pakietu internetowego, aby przekazać wyrażenie regularne pliku testowego. Na przykład:angular.json - zmień program budujący testy z
@angular-devkit/build-angular:browser
i ustaw niestandardowy plik konfiguracyjny:extra-webpack.config.js - utwórz konfigurację pakietu internetowego, która odczytuje wyrażenie regularne z wiersza poleceń:
test.ts - edytuj specyfikację
Następnie użyj w następujący sposób, aby zastąpić ustawienie domyślne:
Udokumentowałem tutaj historię , z góry przepraszam za typy i błędne linki. Podziękowania dla powyższej odpowiedzi autorstwa @ Aish-Anu za wskazanie mi właściwego kierunku.
źródło
To działa dla mnie w Angular 7. Opiera się na opcji --main polecenia ng. Nie jestem pewien, czy ta opcja jest nieudokumentowana i prawdopodobnie może ulec zmianie, ale działa dla mnie. Umieściłem wiersz w moim pliku package.json w sekcji skryptów. Tam, używając opcji --main z poleceniem ng test, określam ścieżkę do pliku .spec.ts, który chcę wykonać. Na przykład
Skrypt można uruchomić tak samo, jak każdy taki skrypt. Uruchamiam go w Webstorm, klikając „test 1” w sekcji npm.
źródło
Rozwiązałem ten problem samodzielnie, używając gruntów. Mam poniższy skrypt. Skrypt pobiera parametr wiersza poleceń określonego testu do uruchomienia i tworzy kopię pliku test.ts i umieszcza tam tę konkretną nazwę testu.
Aby to uruchomić, najpierw zainstaluj grunt-cli używając:
Umieść poniższe zależności gruntów w swoim pliku package.json:
Aby go uruchomić, zapisz poniższy plik gruntowy jako Gruntfile.js w folderze głównym. Następnie z wiersza poleceń uruchom go jako:
Spowoduje to uruchomienie app.component.spec.ts.
Plik Grunt jest następujący:
źródło
Dodając do tego dla ludzi takich jak ja, którzy szukali sposobu na uruchomienie jednej specyfikacji w Angular i znaleźli to SO.
Zgodnie z najnowszą dokumentacją Angular (wersja 9.0.6 w momencie pisania),
ng test
polecenie ma--include
opcję, w której można określić katalog*.spec.(ts|tsx)
plików lub.spec.(ts|tsx)
sam pojedynczy plik.https://angular.io/cli/test
źródło
Wystarczy niewielka zmiana w
test.ts
pliku w folderze src:Tutaj,
test-example
jest dokładna nazwa pliku, który musimy uruchomićW ten sam sposób, jeśli chcesz przetestować tylko plik usługi, możesz zastąpić nazwę pliku, na przykład „/test-example.service”
źródło
To działało dla mnie w każdym przypadku:
Jednak zwykle otrzymywałem komunikat „TypeError: Cannot read property 'ngModule' of null” w tym celu:
Wersja @ angular / cli 10.0.4
źródło