属性 在规范文件中被识别为未定义,即使它存在于组件中。使用 Karma 在 Angular 中进行单元测试 - Jasmine

Property recognized as undefined in spec file even though it exist in the component. Unit Test in Angular with Karma - Jasmine

我在 Angular 的组件中有以下方法,但是当我为它编写单元测试时,它失败了,无法识别组件中实际存在的属性;这是我的方法

makeUrl(): string {
    const base: string = this.marketConditionsEnvironment.apiRoot;
    const tempEquipment: string = '?equipment=Van';
    const origin: string = this.makeLocation('origin', this.marketConditionsData.origin); 
    const searchCriteria: CreateSearchCriteria = this.dataSource.currentCriteria.createAndExecuteSearchCriteria.searchCriteria;
    if (searchCriteria.origin?.point) {
        return `${base}${tempEquipment}${origin}`;
    }
    return `${base}${tempEquipment}`;
}

我为此编写了这个单元测试:

describe('makeUrl', () => {
    it('should call initCapital and makeLocation', () => {
        spyOn(component, 'initCapital');
        spyOn(component, 'makeLocation');
        component.makeUrl();
        expect(component.initCapital).toHaveBeenCalled();
        expect(component.makeLocation).toHaveBeenCalled();
    });
});

但是,测试失败并出现以下错误:“类型错误:无法读取未定义的属性(读取 'currentCriteria')”。

无法到达“dataSource”对象。

正在通过输入传递给组件:

@Input() dataSource: LoadsDataSource;

我做错了什么?谢谢。

当你写一个测试时,没有任何东西自己初始化。你的测试看起来很标准,所以问题一定是你没有在测试中初始化数据源属性(它是 Input 是无关紧要的,同样适用于“常规”属性)