Невозможно увеличить покрытие кода в тестировании Angular Unit - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь узнать, как выполнить модульное тестирование для Angular с Кармой и Жасмином.

Моя проблема в том, что я делаю это с помощью spyOn () и wait.toHaveBeenCalled (), и хотя Карма говорит, что прошлотесты, покрытие кода не обновляется.

Я новичок в модульном угловом тестировании и не знаю, как правильно тестировать методы, чтобы получить покрытие кода.

Спасибо всем за помощь.

Это сервис, который я хочу протестировать:

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

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

На самом деле вам нужно не только создать шпиона, но и выполнить его, чтобы увеличить охват.Шпион заменяет шпионскую функцию заглушкой.Если вы хотите, чтобы эта шпионская функция вызывалась нормально, вам необходимо добавить .and.callThrough () к вашему шпиону.

spyOn(EnvironmentService, 'isProduction').and.callThrough()

Вы также можете прочитать больше здесь: о шпионах и звонках через

1 голос
/ 27 сентября 2019

spyOn(EnvironmentService, 'isProduction'); перезаписывает метод обслуживания, а затем EnvironmentService.isProduction(); вызывает шпион вместо вашего метода.Таким образом, ваш метод не вызывается.действительный тест удалит шпиона и будет выглядеть как expect(EnvironmentService.isProduction()).toBe(false)

...