首页 > 解决方案 > 在茉莉花中测试嵌套函数

问题描述

我想在我的项目中进行测试,我想要测试的函数是一个嵌套函数,函数中有函数

像这样的功能:

  ngOnInit() {
    this.getMenu()
  }

这是我的测试规范:

    describe('NavigationComponent', () => {
        let component: NavigationComponent;
        let fixture: ComponentFixture<NavigationComponent>;

        beforeEach(async(() => {
          TestBed.configureTestingModule({
            imports: [

            ],
            providers: [
              { provide: AuthenticationService, useClass: MockAuthenticationService }
            ]
          })
          .compileComponents();
        }));

        beforeEach(() => {
          fixture = TestBed.createComponent(NavigationComponent);
          //navComponent = TestBed.createComponent(NavigationComponent);
          component = fixture.componentInstance;
          fixture.detectChanges();
        });

  it('getMenu should called', ()=>{
        spyOn(component, 'getMenu');                  
        fixture.detectChanges();                      
        expect(component.getMenu).toHaveBeenCalled();
    })

当我测试 ngOnInit 时它可以工作,但我不知道如何测试“getMenu”

谢谢您的帮助

标签: angularjasmine

解决方案


您可以检查运行getMenu()时是否调用了该方法ngOnInit()

您要做的就是监视该方法,然后进行验证。

spyOn(compInstance, 'getMenu');                  //spy on getMenu
fixture.detectChanges();                         //calls ngOnInit() and updates dom
expect(compInstance.getMenu).toHaveBeenCalled(); //verify getMenu() invokation

如果你想测试 的逻辑getMenu(),那么你可以直接从你的测试规范中调用它,然后验证它的输出。

let res = compInstance.getMenu();
expect(res).toBe('pizza');

推荐阅读