代码之家  ›  专栏  ›  技术社区  ›  Kenny

构造函数中的SpyOn服务函数调用

  •  5
  • Kenny  · 技术社区  · 6 年前

    我遇到了一个问题,即试图监视构造函数中调用的服务函数调用。测试是基本的,只是验证函数调用是否实际被调用。

     beforeEach(async(() => {
        TestBed.configureTestingModule({
          declarations: [
            AppComponent
          ],
          providers: [TestService]
        }).compileComponents();
      }));
    
    beforeEach(() => {
    
        fixture = TestBed.createComponent(AppComponent);
        let service = fixture.debugElement.injector.get(TestService);
    
        component = fixture.componentInstance;
        spyOn(service , "start").and.callThrough();
    
        fixture.detectChanges();
      });
    
     it('start gets called', () => {
    
        expect(service .start).toHaveBeenCalled();
      })
    

    至于AppComponent,在构造函数中它只是调用服务。开始() 我认为问题在于,spyOn在创建组件后被调用,但在注入服务之前,我如何监视服务?ie:

    fixture = TestBed.createComponent(AppComponent);
    let service = fixture.debugElement.injector.get(TestService);
    
    1 回复  |  直到 6 年前
        1
  •  10
  •   Richard Matsen    6 年前

    在我看来,组件的构造函数在您设置spy时已经被调用,所以需要稍微更改一下序列。

    beforeEach(() => {
      let service = TestBed.get(TestService);
      spyOn(service , "start").and.callThrough();
      fixture = TestBed.createComponent(AppComponent);
      component = fixture.componentInstance;
      fixture.detectChanges();
    });
    

    裁判 Angular Test Bed