无法在Angular单元测试中增加代码覆盖率

问题描述 投票:0回答:1

我正在尝试学习如何使用Karma和Jasmine对Angular进行单元测试。

[我的问题是,我使用spyOn()和Expect.toHaveBeenCalled()做到了这一点,即使Karma说通过了测试,代码覆盖率也没有更新。

我是角单元测试的新手,我不知道如何正确地测试方法以获取代码覆盖率。

感谢大家的帮助。

这是我要测试的服务:

import { Injectable } from '@angular/core';

import { environment } from '../../environments/environment';

@Injectable({
providedIn: 'root',
})
export class EnvironmentService {

constructor() { }

public static isOAuthEnabled(): boolean {
    return environment.oAuthEnable;
}

public static isProduction(): boolean {
    return environment.production;
}
}

我的规格:

import { TestBed, inject } from '@angular/core/testing';

import { EnvironmentService } from './environment.service';

describe('EnvironmentService', () => {
    beforeEach(() => {
TestBed.configureTestingModule({
  providers: [EnvironmentService],
});
});

  it('should be created', inject([EnvironmentService], (service: 
       EnvironmentService) => {
    expect(service).toBeTruthy();
    }));
    it('isProduction', inject([EnvironmentService], (service: 
      EnvironmentService)  => {
     let env = new EnvironmentService();
     spyOn(EnvironmentService, 'isProduction');
    EnvironmentService.isProduction();
    expect(EnvironmentService.isProduction).toHaveBeenCalledWith();
  }));
});

我不知道为什么它将一种方法标记为已测试,而另一种方法却未标记。

Coverage

angular unit-testing karma-jasmine karma-coverage
1个回答
0
投票

spyOn(EnvironmentService, 'isProduction');会覆盖服务方法,然后EnvironmentService.isProduction();正在调用间谍而不是您的方法。因此,不会调用您的方法。有效的测试将删除间谍,并且看起来像expect(EnvironmentService.isProduction()).toBe(false)

© www.soinside.com 2019 - 2024. All rights reserved.