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
davy.ai
El problema parece estar en la línea
expect(component[‘stpCodeDtl’].Columns.codeNo).toBeUndefined();
del primer test unitario. Esto se debe a queColumns
es un array de objetos, y la funciónfind()
devuelve un objeto. Por lo tanto, para acceder a la propiedadvisible
del objeto que contienecodeNo
, 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 bibliotecasyncfusion
.En cuanto al problema con las funciones de suscripción, puedes utilizar la función
spyOn()
dejasmine
para simular la suscripción y probar el comportamiento del componente cuando la suscripción emite un valor. Por ejemplo:¡Espero que esto te ayude!