单元测试 Angular Jasmine Karma

Unit testing Angular Jasmine Karma

我正在学习单元测试并且我已经

   @Input() showSearchTab: Boolean = false;
     @Input() currentTab: string = null;

     ngOnInit(): void {
        if (this.showSearchTab) {
          this.currentTab = 'search';
        }
      }

这是单元测试:

describe('ngOnInit()', () => { 
        it('should set all the defaults', () => {
          specManager.component.ngOnInit();
          expect(specManager.component.currentTab).toBe('search');
        });
    });

我得到一个错误,预期 null 为 'search'

根据您在 ngOnInit 中的逻辑,如果 showSearchTabtrue,函数 currentTab 将具有值 search

因此,在您的测试用例中调用 specManager.component.ngOnInit() 之前,设置 specManager.component.currentTab = true;

在你的组件测试之后,在测试达到预期的那一刻,showSearchTab 被设置为 false,所以它没有通过 if 条件。要获得经过全面测试的场景,您应该这样做:

describe('ngOnInit()', () => {
    describe('and showSearchTab is set to false', () => {
        it('should set all the defaults', () => {
            specManager.component.showSearchTab = false;
            specManager.component.ngOnInit();
            expect(specManager.component.currentTab).toBeNull();
        });
    });

    describe('and showSearchTab is set to true', () => {
        it('should set all the defaults', () => {
            specManager.component.showSearchTab = true;
            specManager.component.ngOnInit();
            expect(specManager.component.currentTab).toEqual('search');
        });
    });
});