¿Cómo depuro un error" [object ErrorEvent] thrown " en mis pruebas Karma/Jasmine?


Tengo varias pruebas fallidas que solo producen [object ErrorEvent] thrown. No veo nada en la consola que me ayude a identificar el código ofensivo. ¿Hay algo que deba hacer para localizarlos?

[EDITAR]: Estoy ejecutando Karma v1.70, Jasmine v2.7.0

Author: Kuncevič, 2017-08-16

11 answers

Para arreglar que tienes que ejecutar tus pruebas sin sourcemaps como solución:

CLI v6. 0. 8 y superior
--source-map=false

CLI v6. 0.x versiones anteriores
--sourceMap=false

CLI v1.x
--sourcemaps=false

Hay un tema abierto sobre eso https://github.com/angular/angular-cli/issues/7296

ACTUALIZACIÓN : También tuve ese problema, así que simplemente migré a la última cli y me aseguré de que todos los paquetes se actualizaran en package.json reinstalado el node_modules así que ahora el problema se ha ido.

 91
Author: Kuncevič,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-18 04:12:33

Pruebe si recibe un mensaje de error más descriptivo ejecutando la prueba desde el terminal, como este:

ng test -sm=false

En su prueba, puede reemplazar

it('should...')

Con

fit('should...') 

Ahora solo se ejecutarán las pruebas precedidas por fit. Para dejar el navegador abierto después de ejecutar la prueba, ejecute la prueba de la siguiente manera:

ng test -sm=false --single-run false

Personalmente, he encontrado este error dos veces. Ambos solo se activaron al llamar a fixture.DetectChanges().

El primera vez , lo resolví mediante el uso de interpolación de cadenas de forma más segura en mi .archivo html.

Unsafe ejemplo:

<p>{{user.firstName}}</p>

Safe (r) ejemplo (note el signo de interrogación):

<p>{{user?.firstName}}</p>

Lo mismo puede aplicarse a la vinculación de propiedad:

<p [innerText]="user?.firstName"></p>

El segundo tiempo, yo estaba usando un DatePipe en mi .archivo html, pero la propiedad simulada en la que lo utilicé no era una fecha.

.archivo html:

<p>{{startDate | date: 'dd-MM-yyyy'}}</p>

.archivo ts (datos simulados) (incorrecto):

let startDate = 'blablah';

.archivo ts (mock-data) (correcto):

let startDate = '2018-01-26';
 21
Author: harryvederci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-13 09:09:00

Si sourcemap = false no ayuda, intente 1) abra su navegador ejecutando las pruebas 2) haga clic en el botón depurar 3) abra la consola

El error estará ahí

introduzca la descripción de la imagen aquí

 13
Author: Victor Bredihin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 10:52:41

TL; DR: Puede estar relacionado con el enrutamiento de pruebas.

Estoy recibiendo [object ErrorEvent] thrown también. Una hora después, lo rastreé hasta una línea de código.

this.username = this.userService.getUser(this.route.snapshot.paramMap.get('id'))[0];

El problema radica en que el entorno de prueba intenta evaluar this.route.snapshot.paramMap.get('id').

Si lo sustituyo por 0, [object ErrorEvent] thrown desaparece.

My UserService tiene un usuario así:

public users = [ ["admin", "First name", "Surname", etc... ] ].

Así que 0 solo obtiene este usuario, en index 0.

De lo contrario, cuando se ejecuta normalmente mi aplicación, this.route.snapshot.paramMap.get('id') se evalúa cuando el usuario selecciona un usuario para editar de mi tabla de usuarios.

Así que en mi HTML, *ngFor="let user of users; index as i" bucles para mostrar todos los usuarios luego routerLink="/edit/{{i}}" para que pueda hacer clic en los botones de edición para cada usuario, que cuando se hace clic ir a por ejemplo http://localhost:4200/edit/0 para editar los detalles del usuario administrador antes mencionado.

 4
Author: Leo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-04 19:19:14

Para mí estaba relacionado con tener una promesa resuelta en el ngOnInit de un componente. Tuve que usar async, fakeAsync y marque así como stubbing el servicio async con spyOn

beforeEach(async(
  //... initialise testbed and component
))
beforeEach(fakeAsync(
  // ... setup mocks then call:
  component.ngOnInit()
  tick()
  fixture.detectChanges()
))

Angular-Cómo probar un componente con una llamada de servicio asíncrona

 3
Author: roo2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-12 06:39:46

Esto se debe a que el framework jasmine no puede manejar el tipo ErrorEvent, por lo que no extrae el mensaje de error y llama a error.toString() en ese objeto.

Acabo de presentar un problema en jasmine repo https://github.com/jasmine/jasmine/issues/1594

Mientras no esté arreglado, puede parchear temporalmente su paquete jasmine instalado en la carpeta node_modules. En mi caso es

node_modules/jasmine/node_modules/lib/jasmine-core/jasmine.js

Y luego cambiar la implementación de ExceptionFormatter de esto

if (error.name && error.message) {
    message += error.name + ': ' + error.message;
} else {
    message += error.toString() + ' thrown';
}

A esto

if (error.name && error.message) {
    message += error.name + ': ' + error.message;
} else if (error.message) {
    message += error.message;
} else {
    message += error.toString() + ' thrown';
}

Ayuda a identificar el problema.

 3
Author: Ginie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-23 08:34:03

Yo tenía el mismo problema. Una forma en que ocurre este error es cuando intenta acceder a cualquier cosa nula o indefinida en la plantilla. Asegúrese de tener una comprobación de seguridad en esas variables.

Por ejemplo, esto lanzará [object: ErrorEvent] cuando la configuración no esté definida en la carga del componente.

Plantilla.html

<div *ngIf="config.options">
   .....
   ......
</div>

Haga esto en su lugar

<div *ngIf="config?.options">
   .....
   ......
</div>
 1
Author: kashpatel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-15 15:33:38

Para mí el problema fue que tuve una prueba en la que accidentalmente estaba usando la biblioteca auth0-lock.

 0
Author: Manolis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-07 13:29:11

Parecía ser un problema asincrónico, porque después de agregar suficientes it s en una de mis especificaciones de componentes, pude obtener un mensaje de error utilizable que apuntaba a un archivo y una línea dentro de ese archivo (estaba relacionado con paramMap.

En la especificación que probó ParamMap, acabo de agregar:

  describe('this test', () => {
    it('will succeed', () => {
      expect(true).toBeTruthy();
    });

    it('will succeed', () => {
      expect(true).toBeTruthy();
    });

    it('will succeed', () => {
      expect(true).toBeTruthy();
    });

    it('will succeed', () => {
      expect(true).toBeTruthy();
    });
  });
 0
Author: inorganik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-22 17:00:43

Qué pasa con la limpieza después de cada caso de prueba:

  afterEach(() => {
    TestBed.resetTestingModule();
  })
 0
Author: Sebastian Brestin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-21 10:14:48

Es posible que tenga una prueba race o async que no esté configurada correctamente o que se use incorrectamente. Asumiría que el caso de depuración necesita ser arreglado e ignoraría que la línea de comandos pasa. Simplemente mantenga actualizado el karma test runner (browser) en caso de que el error [object ErrorEvent] thrown aparezca intermitentemente, luego asegúrese de haber implementado la condición async correctamente.

Esperemos que esto funcione.

 -1
Author: Pradosh kumar Mohapatra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-08 16:43:24