【问题标题】: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();;
});

问题是在我的调试过程中,我可以确保调用了该方法,但测试总是会失败。

如果有人提供帮助,将不胜感激。

【问题讨论】:

    标签: angularjs typescript ionic-framework ecmascript-6 jasmine


    【解决方案1】:

    正如this answer 中所解释的,使用原型方法的好处之一是它们可以在类实例化之前被监视或模拟。考虑到这是导出了控制器类的 TypeScript 代码,它是:

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

    让构造函数包含初始化逻辑通常是一个坏习惯,特别是因为这会使类更难测试和扩展。由于 AngularJS 已经提供了控制器挂钩,因此最好将所有初始化逻辑移至 $onInit,除非存在与生命周期相关的计时问题。

    【讨论】:

      猜你喜欢
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 2018-07-12
      相关资源
      最近更新 更多