无法在Angular组件中模拟错误响应?

时间:2018-05-18 11:01:47

标签: angular jasmine karma-jasmine

您好我正在编写单元测试用例我正在使用Jasmine作为我的Angular 5组件。在页面加载时,我调用的是loadscopesdata方法来填充我的html代码中的网格。以下是我的单元测试用例。

 it('Ng on init', () => {
        component.ngOnInit();
 });

以下是我的实际组件代码。

 ngOnInit() {
   this.loadScopesData();
 }

下面是我的loadscopedata函数。

loadScopesData() {
        this.scopeService.getScopesByTenantId(this._searchText, this._onlyActive).subscribe(results => this.onScopesDataLoadSuccessful(results), error => this.onScopesDataLoadFailed(error));
    }

以下是我的onScopesDataLoadFailed函数。

onScopesDataLoadFailed(error: any) {
    if (typeof error.error.title != 'undefined') {
        this.alertService.stopLoadingMessage();
        this.alertService.showMessage(error.error.title, error.error.status, MessageSeverity.error);
        this.rows = [];
        this.loadingIndicator = false;
    }
}

我能够注入我的模拟服务并得到一些虚拟数据,一切都按预期工作但我收到以下错误

TypeError: Cannot read property 'title' of undefined
    at ScopeEditorComponent.onScopesDataLoadFailed (http://localhost:9876/base/boot-tests.ts?195796ce0b6971c676ffa17a1f170941fa665d9e:135378:32)

以下是我更新的代码..

it('Ng on init', () => {
    component.ngOnInit();
    it('should error', () => {
        spyOn(component['ScopeEndpoint'], 'getScopesByTenantId').and.callFake(() => Observable.throw({
            error: {
                title: 'Mocked title',
                status: 404 // Mocked status
            }
        }));
    });
});

有人可以帮我解决如何处理onScopesDataLoadFailed方法并摆脱这个错误吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

it('should error', () => {
  spyOn(component['scopeService'], 'getScopesByTenantId').and.callFake(() => Observable.throw({ error: {
    title: 'Mocked title',
    status: 404 // Mocked status
  }}));
});

这将模拟您的服务返回的错误。

修改

it('Ng on init', () => {
  spyOn(component['ScopeEndpoint'], 'getScopesByTenantId').and.callFake(() => Observable.throw({ error: {
    title: 'Mocked title',
    status: 404 // Mocked status
  }}));
  component.ngOnInit();
});