Я собираюсь проверить, вызывает ли метод компонента метод обслуживания. Реализация метода сервиса - это Post, однако меня не интересуют механизмы post, так как я планирую проверить это в сервисе, скорее я просто хочу знать, был ли вызван правильный метод сервиса.
Я новичок в модульном тестировании, однако ошибка указывает на использование spyon следующим образом. Использование spyOn ('object, methodName'), указывающее, что я не создаю должным образом экземпляр объекта службы для тестирования, однако в Чтобы создать объект службы, требуется HttpClient в конструкторе, я пробовал так много решений, и я часами читал на этом этапе, помощь будет очень признателен.
Best, S C
Юнит-тест
describe('SchedulerComponent', () => {
let component : SchedulerComponent;
let fixture : ComponentFixture<SchedulerComponent>;
let schedulerReportService : SchedulerReportService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ SchedulerComponent ],
imports: [BrowserAnimationsModule,
MatSlideToggleModule,
MatRadioModule,
MatFormFieldModule,
MatInputModule,
MatSelectModule,
MatNativeDateModule,
MatDatepickerModule,
NativeDateModule,
NgxMaterialTimepickerModule,
ReactiveFormsModule,
FormsModule,
HttpClientTestingModule],
schemas:[CUSTOM_ELEMENTS_SCHEMA],
providers: [{provide : SchedulerReportService}]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SchedulerComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
fit('onSubmit should call scheduleReportService',inject([SchedulerReportService], (service: SchedulerReportService) => {
let scheduleServiceSpy = spyOn(schedulerReportService, 'submitScheduledReport') ;
let submitReportSpy = spyOn(component, 'onSubmit');
submitReportSpy.and.callThrough();
expect(scheduleServiceSpy).toHaveBeenCalled();
}))
Соответствующий сервисный код выглядит следующим образом:
@Injectable({
providedIn: 'root'
})
export class SchedulerReportService {
constructor(private http: HttpClient) { }
submitScheduledReport(servicerequest: ScheduleService) {
console.log(servicerequest)
// const headers = new HttpHeaders({'key':'value'});
// return this.http.post<ScheduleService>(localUrl, servicerequest, {headers : headers} ).pipe(
// retry(1), catchError(this.handleError<ScheduleService>('scheduled report post error')));
}
Компонент содержит метод для запуска сервиса
export class SchedulerComponent implements OnInit {
constructor(private fb: FormBuilder,
private schedulerReportService: SchedulerReportService) {
onSubmit(){
let report = this.schedulerForm.value;
let scheduleServiceModel = new ScheduleService(report)
this.schedulerReportService.submitScheduledReport(scheduleServiceModel);
}
}