Mam kilka testów, które kończą się niepowodzeniem [object ErrorEvent] thrown
. Nie widzę w konsoli niczego, co pomogłoby mi zlokalizować nieprawidłowy kod. Czy jest coś, co muszę zrobić, aby je wyśledzić?
[EDYCJA]: Używam Karma v1.70, Jasmine v2.7.0
angular
angular-cli
karma-jasmine
Darrell Brogdon
źródło
źródło
[object ErrorEvent] thrown
to dosłownie wszystko, co mówi. Nie ma nic przed ani po.it()
nafit()
, mimo że działa tylko ten pojedynczy test, błąd jest nadal zgłaszany. Jakieś zalecenia dotyczące debugowania tego typu błędów?Odpowiedzi:
W ramach szybkiej poprawki możesz spróbować uruchomić testy bez map źródeł :
CLI 6.0.8 i nowsze
--source-map=false
Wczesne wersje CLI 6.0.x.
--sourceMap=false
CLI v1.x
--sourcemaps=false
Jest otwarty problem dotyczący tego https://github.com/angular/angular-cli/issues/7296
AKTUALIZACJA : Miałem również ten problem, więc właśnie przeprowadziłem migrację do najnowszej CLI i upewniłem się, że wszystkie pakiety są zaktualizowane, a
package.json
także w pełni ponownie zainstalowałem,node_modules
więc teraz problem zniknął.źródło
--sourceMap=false
Wydaje się , że dla angular-cli 6 działa.Jeśli sourcemap = false nie pomoże, spróbuj 1) otworzyć przeglądarkę, uruchamiając testy 2) kliknij przycisk debugowania 3) otwórz konsolę
Błąd tam będzie
źródło
--sourcemaps=false
nie działało dla mnie, ale działało bezbłędnie! Dziękuję Ci!Spróbuj, jeśli otrzymasz bardziej opisowy komunikat o błędzie, uruchamiając test z terminala, na przykład:
W swoim teście możesz wymienić
z
Teraz będą wykonywane tylko testy poprzedzone dopasowaniem . Aby pozostawić otwartą przeglądarkę po uruchomieniu testu, uruchom test w następujący sposób:
Osobiście dwukrotnie napotkałem ten błąd. Oba zostały wyzwolone tylko podczas wywoływania fixture.detectChanges ().
Za pierwszym razem rozwiązałem to, używając bezpieczniejszej interpolacji ciągów w moim pliku .html.
Niebezpieczny przykład:
Przykład Safe (r) (zwróć uwagę na znak zapytania):
To samo może dotyczyć wiążących majątku:
Za drugim razem użyłem DatePipe w moim pliku .html, ale mock właściwość, na której go użyłem, nie była datą.
Plik .html:
Plik .ts (mock-data) ( nieprawidłowo ):
Plik .ts (mock-data) ( poprawne ):
źródło
Dzieje się tak, ponieważ struktura Jasmine nie obsługuje typu ErrorEvent, więc nie wyodrębnia komunikatu o błędzie i
error.toString()
zamiast tego wywołuje ten obiekt.Właśnie zgłosiłem problem w repozytorium jaśminu https://github.com/jasmine/jasmine/issues/1594
Dopóki nie zostanie to naprawione, możesz tymczasowo załatać zainstalowany pakiet jasmine w folderze node_modules. W moim przypadku tak
node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js
a następnie zmień implementację ExceptionFormatter z this
do tego
Pomaga zidentyfikować problem.
źródło
node_modules/jasmine_core/lib/jasmine_core/jasmine.js
uncaught
dla mnie, co nie było pomocne. Dodałem więc kod do drukowaniaerror
obiektu i jego właściwości.if(error){ // message+=error; for(var propName in error) { propValue = error[propName] message+='error prop: '+propName+', value: '+propValue; } }
. To dostarczyło dodatkowych informacji, które pomogły mi w debugowaniu - np.error prop: filename, value: blob:http://localhost:9881/11777e3a-28d8-414e-9047-cee7d328e843
Dla mnie było to związane z wypełnieniem obietnicy w
ngOnInit
komponencie. Musiałem użyćasync
,fakeAsync
i zaznaczyć jak gasząc usługę transmisji asynchronicznej zspyOn
Angular - jak jednostkowo testować komponent z asynchronicznym wywołaniem usługi
źródło
TL; DR: Może to być związane z trasowaniem testów.
Ja
[object ErrorEvent] thrown
też. Godzinę później prześledziłem to do jednej linii kodu.Problem polega na tym, że środowisko testowe próbuje dokonać oceny
this.route.snapshot.paramMap.get('id')
.Jeśli zastąpię go
0
,[object ErrorEvent] thrown
znika.Moja usługa userService ma takiego użytkownika:
Więc
0
po prostu pobiera tego użytkownika w index0
.W przeciwnym razie, podczas normalnego działania mojej aplikacji,
this.route.snapshot.paramMap.get('id')
jest oceniany, gdy użytkownik wybierze użytkownika do edycji z mojej tabeli użytkowników.Tak więc w moim HTML
*ngFor="let user of users; index as i"
pętle wyświetlają wszystkich użytkowników,routerLink="/edit/{{i}}"
więc możesz kliknąć przyciski edycji dla każdego użytkownika, które po kliknięciu przechodzą np.http://localhost:4200/edit/0
Do edycji wyżej wspomnianych danych administratora.źródło
co z czyszczeniem po każdym przypadku testowym:
źródło
Miałem ten sam problem. Jednym ze sposobów wystąpienia tego błędu jest próba uzyskania dostępu do czegokolwiek zerowego lub niezdefiniowanego w szablonie. Upewnij się, że masz sprawdzanie bezpieczeństwa tych zmiennych.
Na przykład spowoduje to zgłoszenie [obiekt: ErrorEvent], gdy konfiguracja jest niezdefiniowana podczas ładowania komponentu.
template.html
Zrób to zamiast tego
źródło
Pomocne może być to, że jeśli masz otwarte okno Chrome dla swojego testera Karma, otwórz narzędzia programistyczne i sprawdź tam konsolę. Pomogło mi to dowiedzieć się, że aplikacja nie może użyć metody Array.findIndex na niezdefiniowanej tablicy (ponieważ struktura danych została zorganizowana według ciągu daty, takiego jak data [2018] [3] [28]), a Tak się złożyło, że wskazywałem na niewłaściwą datę), ale zamiast po prostu zatrzymać się na błędzie, test trwał dalej.
źródło
Dla mnie problem polegał na tym, że miałem test, w którym przypadkowo korzystałem z biblioteki auth0-lock .
źródło
Wyglądało na to, że jest to problem asynchroniczny, ponieważ po dodaniu wystarczającej liczby
it
znaków w jednej ze specyfikacji mojego komponentu udało mi się uzyskać użyteczny komunikat o błędzie, który wskazywał na plik i wiersz w tym pliku (był powiązany zparamMap
.W specyfikacji, która testowała ParamMap, właśnie dodałem:
źródło
Być może masz wyścig lub test asynchroniczny, który nie jest poprawnie skonfigurowany lub jest nieprawidłowo używany. Zakładałbym, że przypadek debugowania musi zostać naprawiony i zignorowałbym, że wiersz poleceń przechodzi. Po prostu odświeżaj program uruchamiający testy karmy (przeglądarkę) na wypadek, gdyby błąd
[object ErrorEvent] thrown
pojawił się sporadycznie, a następnie upewnij się, że poprawnie zaimplementowałeś warunek asynchroniczny.Mam nadzieję, że to zadziała.
źródło
Ten błąd wskazuje, że masz coś nieokreślonego. Najłatwiejszym sposobem debugowania go z mojego doświadczenia jest:
źródło
[object ErrorEvent] thrown
W moim przypadku problem był z usługą, ponieważ jeden z obiektów będzie niezdefiniowany podczas wykonywania testów.
Przykładem kodu usługi był jak poniżej dostęp do domeny,
Specyfikacje odwołujące się do tej usługi zakończyły się niepowodzeniem i wystąpił błąd „ [obiekt ErrorEvent] zgłoszony ”.
Zakpiłem z obiektu usługi we wszystkich specyfikacjach, które do tego odnosiły się, i problem został rozwiązany.
Usługa pozorowana
I użyj tego pozorowanego obiektu usługi u dostawców, jak poniżej,
źródło
Używałem proxy w mojej aplikacji zdefiniowanej w proxy.conf.json na przykład:
Ponieważ Karma nie była świadoma tego serwera proxy, ciągle wyświetlała błędy w konsoli, że nie można znaleźć punktu końcowego API. Po przejrzeniu dokumentacji Karmy dowiedziałem się, że mogę dodać właściwość „proxy” w karma.conf.js z tym samym obiektem z proxy.conf.json:
Błąd w konsoli zniknął, a zdarzenie [object errorEvent] nie było już zgłaszane.
źródło
W końcu co może mi pomóc:
źródło