TypeError:无法读取未定义的属性(正在读取‘id’)

czfnxgou  于 2022-09-18  发布在  Java
关注(0)|答案(4)|浏览(357)

我的终端中有这样一个错误:
TypeError:无法读取未定义的属性(正在读取‘id’)

我正在尝试测试对API的调用,但出现错误。

我的职能:

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();
            }
        })
    })
}

我的规格文件:

it('should call api.send', () => {
    let spy1 = spyOn(api, 'send');
    let item = {
        id: 1,
        name: 'test',
    }

    component.addItem(item);
    component.itemToForm();

    expect(spy1).toHaveBeenCalled();
});
jdgnovmf

jdgnovmf1#

正在发生的事情:

函数itemToForm()this.item准备就绪之前被调用。

**有很多策略可以避免这个错误。**一个非常简单的策略是在函数的开头添加一个Catcher,如下所示:

itemToForm = () => {
  if(this.item === undefined) {return}

  // The rest of the code
}

如果数据尚不存在,则此操作将停止该功能。

更优雅的解决方案可能是在您的操作顺序上再往上走,找出谁在调用itemToForm(),并确保在调用之前数据已经存在。

1szpjjfi

1szpjjfi2#

我碰上了这个问题,但我的问题实际上是完全不同的东西。

出于某些原因,我在我的代码中

import { SOME_OBJECT } from '.';

它应该是这样的:

import { SOME_OBJECT } from './proper-file';
3vpjnl9f

3vpjnl9f3#

尝试使用npm install [path to module here]安装本地NPM模块时,出现错误*“Cannot Read Properties of Unfined(Read‘Spec’)”*。

问题的根源:我没有在其Package.json文件中为本地模块命名。

wbgh16ku

wbgh16ku4#

在我的例子中,错误是类似的,但我得到了一个不同的解决方案,因为我在使用该JavaScript文件中的正文解析器模块。

我不得不补充一句

app.use(bodyParser.urlencoded({ extended: true }));

相关问题