Tengo este error en mi terminal:
TypeError: no se pueden leer las propiedades de undefined (leyendo 'id')
Estoy intentando probar la llamada a una API, pero aparece el error.
Mi función:
itemToForm = () => { this.api.send(this.component, 'get', { lang: 'ES', filter: { id: this.item['id'] } } ).then(resEsp => { this.item = resEsp['data'][0]; this.api.send(this.component, 'get', { lang: 'EN', filter: { id: this.item['id'] } } ).then(res => { let itemEng = res['data'][0]; let fields = this.formDef.map(register => register.filter( field => field['register_table'].indexOf('traduction') !== -1 ).map( field => field['field_name']) ).filter(register => register.length); fields = fields.length ? fields[0] : []; if (itemEng) { this.item = Object.keys(itemEng).reduce((obj, key) => { obj[key] = this.item[key]; if (fields.indexOf(key) !== -1) { obj[key + '_eng'] = itemEng[key]; } return obj; }, {}); } if (this.item) { this.setForm(); } }) }) }Mi archivo de especificaciones:
it('should call api.send', () => { let spy1 = spyOn(api, 'send'); let item = { id: 1, name: 'test', } component.addItem(item); component.itemToForm(); expect(spy1).toHaveBeenCalled(); });Me encontré con esta pregunta, pero mi problema era en realidad algo completamente diferente.
En mi código por algunas razones tuve
import { SOME_OBJECT } from '.';que en su lugar debería ser así:
import { SOME_OBJECT } from './proper-file';Qué está pasando:
Se llama a la función itemToForm() antes de que this.item esté listo.
Hay muchas estrategias para evitar este error. Una muy simple es agregar un receptor al comienzo de la función, así:
itemToForm = () => { if(this.item === undefined) {return} // The rest of the code }Esto detiene la función, si los datos aún no existen.
Una solución más elegante puede ser ir más arriba en su orden de operaciones y encontrar quién está llamando a itemToForm() y asegurarse de que los datos existan antes de llamar.
En caso de que sea útil para que alguien lo sepa, recibí el error Cannot read properties of undefined (reading 'spec') al intentar instalar un módulo npm local con npm install [path to module here] . El origen del problema: no le había dado un nombre al módulo local en su package.json .