监视从组件的构造函数调用的方法
Posted
技术标签:
【中文标题】监视从组件的构造函数调用的方法【英文标题】:Spying on a method which is being called from the component's constructor 【发布时间】:2018-03-31 13:04:43 【问题描述】:我是单元测试新手,我的项目中有一个组件,在其构造函数中调用了一个方法
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 中所解释的,使用原型方法的好处之一是它们可以在类实例化之前被监视或模拟。考虑到这是导出了控制器类的 TypeScript 代码,它是:
it('should call for the someMethod', () =>
spyOn(ComponentClass.prototype, 'someMethod');
// instantiate ComponentClass class
expect(component.someMethod).toHaveBeenCalled();
);
让构造函数包含初始化逻辑通常是一个坏习惯,特别是因为这会使类更难测试和扩展。由于 AngularJS 已经提供了控制器挂钩,因此最好将所有初始化逻辑移至 $onInit
,除非存在与生命周期相关的计时问题。
【讨论】:
以上是关于监视从组件的构造函数调用的方法的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Jasmine 1 中监视 Falcor 数据模型构造函数
如何从同一个类中的另一个构造函数调用抽象类的构造函数(方法重载)[重复]