Жасмин + Карма: ActivatedRoute шпион не вызывается - PullRequest
0 голосов
/ 30 октября 2019

У меня есть угловой компонент, который использует ActivateRoute

getFlavorAndService(): void {
    this._route.params.subscribe(params => {

      const flavor: string = params.flavor;
      const service: string = params.service;
      const platform: string = params.platform;

      if (platform) {
        this.platform = platform;
      } else {
        this.platform = this._dataService.DEFAULT_PLATFORM;
      }

      if (flavor) {
        this.flavor = flavor;
      } else {
        this.flavor = this._dataService.DEFAULT_FLAVOR;
      }

      if (service) {
          this.service = service;
      } else {
        this.service = this._dataService.DEFAULT_SERVICE;
      }
    });
  }

Я пытаюсь проверить метод getFlavorAndService() следующим образом:

it('Test', () => {

      dataService.attributeSearchEnabled = false;
      dataService.endpointSearchEnabled = false;

      const spy = spyOn(activatedRoute, 'params').and.returnValue(of({
        flavor: 'by-fund',
        service: 'profile_benchmarks',
        platform: 'on-prem',
      }));

      component.getFlavorAndService();

      expect(spy).toHaveBeenCalled();

      expect(component.platform).toBe('on-prem');
      expect(component.service).toBe('profile_benchmarks');
      expect(component.flavor).toBe('by-fund');
    });

Я также создал заглушку дляActivatedRoute:

class ActivatedRouteStub {

  get params() {
    return of({});
  }

  get queryParams() {
    return of({});
  }
}

Мои тесты не пройдены, и ни одно из ожиданий не работает нормально. flavor, service и platform принимают значения по умолчанию, предоставленные в классе, а не значения, переданные с использованием spyOn(activatedRoute, 'params').and.returnValue(of({....

Я также предоставил ActivatedRouteStub в методе TestBed.configureTestingModule

{ provide: ActivatedRoute, useClass: ActivatedRouteStub }

1 Ответ

1 голос
/ 30 октября 2019

Вместо:

const spy = spyOn(activatedRoute, 'params').and.returnValue(of({

попробуйте использовать это:

const spy = spyOnProperty(activatedRoute, 'params', 'get').and.returnValue(of({

spyOn -> spyOnProperty

Проверьте документы здесь .

...