角单元测试NgOnInit

时间:2020-04-25 10:36:26

标签: angular unit-testing

如果您能帮助我理解一些事情,我将不胜感激。 我有一个显示一些数据的组件。在ngOnInit()中,将调用http-service方法以从服务器获取数据。这是代码:

// isLogged - is get property
ngOnInit() {
  if (this.isLogged) {
    this.loadData();
 };
}

// Can't call in ngOnInit because this method is being used in other functions
loadData() {
  this.http.getData()
           .subscribe((result) => this.dataToDisplay = result);
}

get isLogged() {
    // this function checks for token in localStorage via custom token service. 
}

我为loadData()编写测试

it('should load data', async(() => {
   component.loadData();
   fixture.whenStable().then( () => {
       fixture.detectChanges();
       expect(component.dataToDisplay).toEqual(mockData);
   });
});

它按预期工作。但是我的问题是:我应该如何测试ngOnInit?该方法所做的只是调用loadData。但是,如何检查get属性是否返回true,则该方法正在调用?我很困惑((

1 个答案:

答案 0 :(得分:0)

在这种情况下,您使用茉莉花的this.loadData()方法来模拟spyOn函数。作为断言,您期望this.loadData()方法已被调用(或尚未基于this.isLogged的值被调用)。

希望对茉莉花toHaveBeenCalled()函数有一个函数调用jasmine。某些示例可以是found here。我假设this.isLogged可以直接在fixture.componentInstance的测试中设置,因此可以将其设置为特定测试用例的期望值。

this.loadDate()的逻辑是单独测试的,因此不需要从ngOnInit()进行测试。