2017-10-19 69 views
1

叫我是新来的单元测试和我在我的项目中的组件,它在其构造方法被调用刺探的方法,它正在从组件的构造

export class myComponent { 
constructor(){  
     this.someMethod(); 
    } 

public someMethod(){ 
//some code 
} 

我希望测试该方法被调用这个测试套件:

it('should call for the someMethod',() => { 
    spyOn(component, 'someMethod') //also tried .and.callThrough(); 

    expect(component.someMethod).toHaveBeenCalled();; 
}); 

问题是当我调试我可以确保该方法被调用,测试总会失败。

会真的很感激它,如果有人帮助。

回答

1

this answer所述,使用原型方法的好处之一是可以在类实例化之前对其进行侦察或模拟。考虑到这是一个具有输出控制器类打字稿代码,它是:

it('should call for the someMethod',() => { 
    spyOn(ComponentClass.prototype, 'someMethod'); 
    // instantiate ComponentClass class 
    expect(component.someMethod).toHaveBeenCalled(); 
}); 

它通常是一个坏习惯,使一个构造函数初始化包含逻辑,特别是因为这使得类更难测试和扩展。由于AngularJS已经提供了控制器钩子,所以希望将所有的初始化逻辑移动到$onInit,除非存在生命周期相关的时序问题。

相关问题