Внедрение зависимостей модульного тестирования Angular 7 не работает в ngOnInit

Я использую Angular 7 и Angular CLI версии 7.3.4. Я выполняю модульное тестирование компонента с двумя сервисными инъекциями, весь важный код приведен ниже. Я включил заглушку, которая вызывает ошибки, файл спецификаций и важную часть рассматриваемого компонента. Несмотря на это, я все еще получаю эту ошибку «TypeError: this.spreading.getSpreadingDays не является функцией». Я знаю, что fix.detectchanges() вызывает вызов ngOnInit, но функция должна быть определена, так как я внедрил службу . Я уверен, что это глупая ошибка, но я просмотрел несколько руководств и не могу понять, что не так с моим кодом. Мы ценим любые предложения.

Файл спецификации

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

import { SpreadSignUpComponent } from './spread-sign-up.component';
import { NO_ERRORS_SCHEMA } from '@angular/core';
import { AuthService } from 'src/app/core/services/auth.service';
import { SpreadingService } from 'src/app/core/services/spreading.service';
import { AuthServiceStub } from 'src/app/core/testing/auth.service.stub';
import { SpreadingServiceStub } from 'src/app/core/testing/spreading.service.stub';

describe('SpreadSignUpComponent', () => {
  let component: SpreadSignUpComponent;
  let fixture: ComponentFixture<SpreadSignUpComponent>;

  let authService: AuthService;
  let spreadingService: SpreadingService;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      providers: [
        { provide: AuthService, useValue: AuthServiceStub },
        { provide: SpreadingService, useValue: SpreadingServiceStub }
      ],
      declarations: [ SpreadSignUpComponent ],
      schemas: [ NO_ERRORS_SCHEMA ],
    })
    .compileComponents();

    authService = TestBed.get(AuthService);
    spreadingService = TestBed.get(SpreadingService);
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(SpreadSignUpComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

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

класс заглушки:

import { SpreadingService } from '../services/spreading.service';
import { of } from 'rxjs';
import { SpreadingDay } from 'src/app/shared/models/spreadingDay';
import { I } from 'src/app/shared/testing/interfaceBuilder';

export class SpreadingServiceStub implements I<SpreadingService> {

  getSpreadingDays() {
    return of([]);
  }

  getSpreadingDaysForUser() {
    return of([]);
  }

  setSpreadingDay(
    spreadingDay: SpreadingDay
  ) {
    return <Promise<void>>{};
  }

  addVolunteerToDay(
    spreadingDay: SpreadingDay,
    userID: string,
  ) {
    return <Promise<void>>{};
  }

  removeVolunteerFromDay(
    spreadingDay: SpreadingDay,
    userID: string,
  ) {
    return <Promise<void>>{};
  }

  addRequestToDay(
    spreadingDay: SpreadingDay,
    userID: string,
    first: string,
    last: string,
  ) {
    return <Promise<void>>{};
  }
}

составная часть:

import { Component, OnInit } from '@angular/core';
import { SpreadingService } from 'src/app/core/services/spreading.service';
import { SpreadingDayReturn, SpreadingDay } from 'src/app/shared/models/spreadingDay';
import { Observable } from 'rxjs';
import { AuthService } from 'src/app/core/services/auth.service';

@Component({
  selector: 'app-spread-sign-up',
  templateUrl: './spread-sign-up.component.html',
  styleUrls: ['./spread-sign-up.component.scss']
})
export class SpreadSignUpComponent implements OnInit {

  spreadingDays$: Observable<SpreadingDayReturn[]>;

  constructor(
    private auth: AuthService,
    private spreading: SpreadingService,
  ) { }

  ngOnInit() {
    this.spreadingDays$ = this.spreading.getSpreadingDays();
  }

person Caleb Herne    schedule 20.03.2019    source источник


Ответы (1)


ваш код { provide: SpreadingService, useValue: SpreadingServiceStub } должен быть { provide: SpreadingService, useClass: SpreadingServiceStub }. трудно заметить ошибку. Я предполагаю, что то же самое следует применить для второй сервисной заглушки.

person Andrei    schedule 20.03.2019