Ich habe mehrere fehlgeschlagene Tests, die nur ausgegeben werden [object ErrorEvent] thrown
. Ich sehe in der Konsole nichts, was mir hilft, den fehlerhaften Code zu lokalisieren. Muss ich etwas tun, um diese aufzuspüren?
[BEARBEITEN]: Ich verwende Karma v1.70, Jasmine v2.7.0
angular
angular-cli
karma-jasmine
Darrell Brogdon
quelle
quelle
[object ErrorEvent] thrown
ist buchstäblich alles, was es sagt. Es gibt nichts vorher oder nachher.it()
zufit()
, obwohl nur der einzige Test läuft, wird der Fehler noch geworfen. Irgendwelche Debug-Empfehlungen für diese Art von Fehler?Antworten:
Als Quickfix können Sie versuchen, Ihre Tests ohne Sourcemaps auszuführen :
CLI v6.0.8 und höher
--source-map=false
Frühere Versionen von CLI v6.0.x.
--sourceMap=false
CLI v1.x.
--sourcemaps=false
Es gibt ein offenes Problem unter https://github.com/angular/angular-cli/issues/7296
UPDATE : Ich hatte auch dieses Problem, also habe ich gerade auf die neueste CLI migriert und sichergestellt, dass alle Pakete aktualisiert wurden.
package.json
Außerdem habe ich das vollständig neu installiert,node_modules
sodass das Problem jetzt behoben ist.quelle
--sourceMap=false
scheint zu funktionieren.Wenn sourcemap = false nicht hilft, versuchen Sie 1) Ihren Browser zu öffnen, in dem die Tests ausgeführt werden, 2) auf die Debug-Schaltfläche zu klicken, 3) die Konsole zu öffnen
Der Fehler wird da sein
quelle
--sourcemaps=false
Ding hat bei mir nicht funktioniert, aber das hat einwandfrei funktioniert! Danke dir!Versuchen Sie, eine aussagekräftigere Fehlermeldung zu erhalten, indem Sie den Test vom Terminal aus wie folgt ausführen:
In Ihrem Test können Sie ersetzen
mit
Jetzt werden nur Tests ausgeführt, denen eine Anpassung vorausgeht . Führen Sie den Test folgendermaßen aus, um den Browser nach dem Ausführen des Tests geöffnet zu lassen:
Persönlich bin ich zweimal auf diesen Fehler gestoßen. Beide wurden nur beim Aufruf von fixture.detectChanges () ausgelöst.
Das erste Mal habe ich es gelöst, indem ich die String-Interpolation sicherer in meiner HTML-Datei verwendet habe.
Unsicheres Beispiel:
Sicher (r) Beispiel (beachten Sie das Fragezeichen):
Gleiches kann für die Eigentumsbindung gelten:
Das zweiten Mal habe ich eine DatePipe in meiner HTML-Datei verwendet, aber die Mock-Eigenschaft, für die ich sie verwendet habe, war kein Datum.
.html Datei:
.ts (Scheindaten) Datei ( falsch ):
.ts (Scheindaten) -Datei ( korrekt ):
quelle
Dies liegt daran, dass das Jasmin-Framework den ErrorEvent-Typ nicht verarbeiten kann, sodass die Fehlermeldung und die Aufrufe nicht extrahiert werden
error.toString()
stattdessen dieses Objekt .Ich habe gerade eine Ausgabe bei Jasmin Repo eingereicht https://github.com/jasmine/jasmine/issues/1594
Solange dies nicht behoben ist, können Sie Ihr installiertes Jasmin-Paket vorübergehend im Ordner node_modules patchen. In meinem Fall ist es
node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js
und ändern Sie dann die Implementierung des ExceptionFormatter
dazu
Es hilft, das Problem zu identifizieren.
quelle
node_modules/jasmine_core/lib/jasmine_core/jasmine.js
uncaught
ich dies geändert hatte , wurde es nur für mich gedruckt , was nicht hilfreich war. Also habe ich Code zum Drucken deserror
Objekts und seiner Eigenschaften hinzugefügt .if(error){ // message+=error; for(var propName in error) { propValue = error[propName] message+='error prop: '+propName+', value: '+propValue; } }
. Dies lieferte zusätzliche Informationen, die mir beim Debuggen halfen - zBerror prop: filename, value: blob:http://localhost:9881/11777e3a-28d8-414e-9047-cee7d328e843
Für mich war es damit verbunden, dass ein Versprechen in
ngOnInit
einer Komponente gelöst wurde . Ich hatte zu verwendenasync
,fakeAsync
und Zecken sowie Anstoßen aus dem Asynchron - Service mitspyOn
Angular - So legen Sie eine Komponententestkomponente mit einem asynchronen Serviceaufruf fest
quelle
TL; DR: Dies kann mit dem Testen des Routings zusammenhängen.
Ich werde
[object ErrorEvent] thrown
auch. Eine Stunde später wurde es auf eine Codezeile zurückgeführt.Das Problem liegt in der Testumgebung, die versucht zu bewerten
this.route.snapshot.paramMap.get('id')
.Wenn ich es durch ersetze
0
,[object ErrorEvent] thrown
geht weg.Mein userService hat einen Benutzer wie folgt:
Also
0
bekommt nur dieser Benutzer am Index0
.Andernfalls, wenn meine App normalerweise ausgeführt wird,
this.route.snapshot.paramMap.get('id')
ausgewertet, wenn der Benutzer einen Benutzer zum Bearbeiten aus meiner Benutzertabelle auswählt.In meinem HTML-
*ngFor="let user of users; index as i"
Code werden also alle Benutzer angezeigt,routerLink="/edit/{{i}}"
sodass Sie auf die Bearbeitungsschaltflächen für jeden Benutzer klicken können. Wenn Sie darauf klicken, gehen Sie beispielsweisehttp://localhost:4200/edit/0
zu, um die oben genannten Details des Administratorbenutzers zu bearbeiten.quelle
Was ist mit der Reinigung nach jedem Testfall:
quelle
Ich hatte das gleiche Problem. Ein Weg, wie dieser Fehler auftritt, ist, wenn Sie versuchen, auf alles zuzugreifen, was in der Vorlage null oder undefiniert ist. Stellen Sie sicher, dass diese Variablen auf Sicherheit überprüft werden.
Dies löst beispielsweise [Objekt: ErrorEvent] aus, wenn die Konfiguration beim Laden der Komponente nicht definiert ist.
template.html
Tun Sie dies stattdessen
quelle
Wenn Sie das Chrome-Fenster für Ihren Karma-Testläufer geöffnet haben, können Sie die Entwicklertools öffnen und die Konsole dort überprüfen. Für mich half dies herauszufinden, dass die App die Array.findIndex-Methode nicht für ein undefiniertes Array verwenden konnte (da die Datenstruktur durch eine Datumszeichenfolge wie data [2018] [3] [28] und organisiert war Ich habe zufällig auf das falsche Datum hingewiesen), aber anstatt nur bei dem Fehler anzuhalten, lief der Test weiter.
quelle
Für mich war das Problem, dass ich einen Test hatte, bei dem ich versehentlich die auth0-lock- Bibliothek verwendet habe.
quelle
Es schien ein asynchrones Problem zu sein, da ich, nachdem ich
it
in einer meiner Komponentenspezifikationen genügend s hinzugefügt hatte , eine verwendbare Fehlermeldung erhalten konnte, die auf eine Datei und eine Zeile in dieser Datei zeigte (auf die es sich bezogparamMap
.In der Spezifikation, die ParamMap getestet hat, habe ich gerade hinzugefügt:
quelle
Möglicherweise haben Sie ein Rennen oder einen Async-Test, der nicht richtig eingerichtet oder falsch verwendet wird. Ich würde annehmen, dass der Debug-Fall behoben werden muss und ignorieren, dass die Befehlszeile übergeben wird. Aktualisieren Sie einfach den Karma-Testläufer (Browser), falls der Fehler auftritt
[object ErrorEvent] thrown
zeitweise auftritt, und stellen Sie dann sicher, dass Sie die asynchrone Bedingung korrekt implementiert haben.Hoffentlich funktioniert das.
quelle
Dieser Fehler zeigt, dass Sie etwas Undefiniertes haben. Der einfachste Weg, es aus meiner Erfahrung heraus zu debuggen, ist:
quelle
[object ErrorEvent] thrown
das Unbekannte nur dank der console.log bis zu dieser entfernten fehlenden Methode aufgespürt :)In meinem Fall lag das Problem beim Dienst, da eines der Objekte während der laufenden Tests undefiniert sein wird.
Service-Code-Beispiel war so etwas wie unter Zugriff auf dom,
Die Spezifikationen, die sich auf diesen Dienst beziehen, sind mit dem Fehler ' [Objekt ErrorEvent] ausgelöst ' fehlgeschlagen .
Ich habe mein Serviceobjekt in allen Spezifikationen verspottet, die sich darauf bezogen, und das Problem wurde behoben.
Mock-Service
Und verwenden Sie dieses Mock-Service-Objekt in den folgenden Anbietern:
quelle
Ich habe in meiner in proxy.conf.json definierten Anwendung einen Proxy verwendet, wie:
Da Karma diesen Proxy nicht kannte, wurden in der Konsole immer wieder Fehler gemeldet, dass der API-Endpunkt nicht gefunden werden konnte. Nachdem ich mir die Karma-Dokumentation angesehen hatte, stellte ich fest, dass ich die Eigenschaft "proxies" in karma.conf.js mit demselben Objekt aus proxy.conf.json hinzufügen konnte:
Der Fehler in der Konsole war verschwunden und das [Objekt errorEvent] wurde nicht mehr ausgelöst.
quelle
Was kann am Ende für mich funktionieren:
quelle