Возвращаемое значение шпиона не работает правильно в тесте службы с использованием жасмина - PullRequest
0 голосов
/ 09 октября 2019

Я не могу правильно смоделировать мое возвращаемое значение функции внутри моей службы в моем тесте Angular.

Я использую:

jasmine v2.8.0 и jasmine-core v2.8.0

Я упростил код, чтобы его было легче понять. Вот оно ...

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

export class NetworkService {

  testNumber = 0;

  constructor(private networkReducerService: NetworkReducerService) {
    this.testNumber = networkReducerService.getNumber();
  }
}

Это мой spec.ts

describe('NetworkService', () => {

  let service: NetworkService;
  let networkReducerServiceSpy: jasmine.SpyObj<NetworkReducerService>;

  beforeEach(() => {

    const nRServiceSpy = jasmine.createSpyObj('NetworkReducerService', ['getNumber']);

    TestBed.configureTestingModule({
      providers: [NetworkService,
        {provide: NetworkReducerService, useValue: nRServiceSpy}
      ]
    });
    service = TestBed.get(NetworkService);
    networkReducerServiceSpy = TestBed.get(NetworkReducerService);
  });

  it('should have the following fields', () => {

    networkReducerServiceSpy.getNumber.and.returnValue(1);

    expect(networkReducerServiceSpy.getNumber).toHaveBeenCalled();

    expect(service.testNumber).toBe(1);
  });

});

Я хочу издеватьсяэтот метод getNumber внутри моего NetworkReducerService

@Injectable({
  providedIn: 'root'
})
export class NetworkReducerService {
  getNumber() {
    return 1;
  }
}

Я получаю следующую ошибку:

Ошибка: ожидается, что неопределенное значение равно 1.

1 Ответ

0 голосов
/ 16 октября 2019

Вы столкнулись с проблемой "a before b". Вы делаете вызов для установки testNumber в конструкторе вашего класса NetworkService. Поэтому он вызывается при первом создании класса - задолго до того, как вы измените значение своего шпиона. Либо установите значение до создания экземпляра службы, либо измените рефакторинг вашего NetworkService, чтобы установить значение внутри метода, который можно проверить, вызвав после создания, а не конструктор.

...