Модульное тестирование углового сервиса, внедрение зависимостей через beforeeach не выполняется - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь выполнить модульное тестирование компонента, который имеет компонент @viewChild и несколько дополнительных сервисов.

Ниже приведен мой файл spec.ts.

  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [ UpStoryComponent,ExperienceListComponent, MdToHtmlPipe, SafeUrlPipe, FormatUrlPipe, CurrencyFormatPipe, NoCommaPipe, MoneyPipe, SafeHtmlPipe],
      imports: [ FormsModule, HttpClientTestingModule, RouterTestingModule],
      providers: [{ provide: ActivatedRoute, useValue: {'params': Observable.from([{ 'id': 1}])}, ContentfulService, MatchingFlowService, FormDataService, LocalStorageService, ScrollService, Title, UpnorwayLoaderService, MoneyService, DayCalculatorService],
      schemas: [NO_ERRORS_SCHEMA]    
    }).compileComponents();
  });


  beforeEach(() => {
    fixture = TestBed.createComponent(UpStoryComponent);
    component = fixture.componentInstance;     
    component.experienceListComponent = TestBed.createComponent(ExperienceListComponent).componentInstance;
    fixture.detectChanges();
  });

  beforeEach(() => {
    contentfulService = TestBed.get(ContentfulService);
    spyOn(contentfulService, 'getEntryBySlug').and.callFake(function (args) {
      return of(blogPost);
    });
    fixture.detectChanges();
  });


  it('should create', () => { 
    expect(component).toBeTruthy();
  }); 

Последний оператор beforeeach выполняется, но не внедряет службу, как ожидалось. Если я помещаю последний оператор beforeeach в качестве второго оператора beforeeach, то текущий второй оператор beforeeach не выполняется должным образом.

Нет никакой зависимости между ExperienceListComponent и ContentfulService. Но при внедрении этих двух служб с помощью операторов beforeach работает только первое внедрение, а не другое.

В чем может быть причина этого? Ценю, если вы могли бы предоставить решение для этого.

...