es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Prueba unitaria de Angular: No se pueden leer propiedades indefinidas (leyendo ‘find’).

Me enfrento a un problema cuando intento probar un objeto de una matriz si su visibilidad es falsa no puedo alcanzar el objeto

Código de TypeScript

scrMenusEvents(event) {
  this.currentActionEvent = event;
  switch (event) {
    case imp.quickAction.afterNewQuick:
    case imp.quickAction.afterNewOperation:
      this.afterNew({
        dimmedControls: ['codeTyp', 'codeTypNm']
      });
      this['stpCodeDtl'].Columns.find(
        (obj) => obj.field === 'codeNo'
      ).visible = false;
      break;
  case imp.quickAction.afterModifyQuick:
  case imp.quickAction.afterModifyOperation:
    this.afterModify({
      dimmedControls: ['codeTyp', 'codeTypNm']
    });
    this['stpCodeDtl'].Columns.find(
      (obj) => obj.field === 'codeNo'
    ).visible = false;
    break;
  }
}

Código de prueba unitaria

it('should afterNew() been called , passed test cases', function () {
  component.scrMenusEvents(quickAction.afterNewQuick);
  expect(component.afterNew).toHaveBeenCalledWith({ dimmedControls: ['codeTyp', 'codeTypNm'] });
  fixture.detectChanges();
  expect(component['stpCodeDtl'].Columns.codeNo).toBeUndefined();
});

it('should afterModify() been called , passed test cases', function () {
  component.scrMenusEvents(quickAction.afterModifyQuick);
  fixture.detectChanges();
  expect(component.afterModify).toHaveBeenCalledWith({
      dimmedControls: ['codeTyp', 'codeTypNm']
  });
});

He intentado mucho. Soy nuevo en las pruebas unitarias y siempre encuentro problemas con esta parte de la función find o forEach y también con las suscripciones, así que cualquier ayuda por favor!

Aquí están los archivos spec y TypeScript:
Archivo Spec
Archivo TypeScript

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema parece estar en la línea expect(component[‘stpCodeDtl’].Columns.codeNo).toBeUndefined(); del primer test unitario. Esto se debe a que Columns es un array de objetos, y la función find() devuelve un objeto. Por lo tanto, para acceder a la propiedad visible del objeto que contiene codeNo, debes encadenar otra notación de punto después de .find() de la siguiente manera: component[‘stpCodeDtl’].Columns.find((obj) => obj.field === ‘codeNo’).visible.

    Además, asegúrate de que la variable component esté correctamente instanciada antes de ejecutar las pruebas, y que todas las dependencias necesarias estén configuradas correctamente, especialmente con respecto a la biblioteca syncfusion.

    En cuanto al problema con las funciones de suscripción, puedes utilizar la función spyOn() de jasmine para simular la suscripción y probar el comportamiento del componente cuando la suscripción emite un valor. Por ejemplo:

    it(‘debería hacer algo cuando la suscripción emita un valor’, () => {
      const spy = spyOn(component.someService.someObservable$, ‘subscribe’);
      component.ngOnInit();
      expect(spy).toHaveBeenCalled();
      // Ahora puedes emitir manualmente un valor desde el observable y probar el comportamiento
    });
    

    ¡Espero que esto te ayude!

Comments are closed.