Как написать код модульного тестирования Jasmine для вызова http из службы, которая извлекает данные из другой службы в Angular 2+ - PullRequest
0 голосов
/ 05 октября 2019

Я пытался написать модульное тестирование httpmock одного из сервисов, который использует метод (функцию) для получения http get call, но не смог записать.

saveservice.service.ts - file

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};
const envURL = sessionStorage.getItem('apiBaseURL');
 httpGet<T>(url) {
    const URL = envURL + url;
    return this.http.get<T>(URL, httpOptions);
  }

Вот как рабочие сервисы и сервис сохранения связаны. Теперь я хочу написать тестовый блок для работы. Файл component.ts, но я не могу записать вызовы httpmock туда.

Для информации, apiUrl присутствует в другом файле с именем env.ts file-- env.ts

env.ts - файл

export const apivalue= {

    apiBaseUrl:"https://example.co/",
  };

work.service.ts

import {SaveserviceService } from '../../.././saveservice.service';

getworklist(employeeID){

    return this.saveservice.httpGet('work/v1/works?employeeid=' + employeeID);
  }

Вот как связаны служба обслуживания и сохранения. Теперь яЯ хочу написать тестовый блок для файла work.component.ts, но я не могу записать туда вызовы httpmock.

work.component.ts

ngOnit(){
this.employeeID:this.id;
   this.workservice.getworkList(this.employeeID).subscribe(
      (data) => {
        this.workList = data;
       console.log(" ggghfghfgh", this.worklist);
      }, (error) => {
        console.log(error);}

Выше приведен файл work.component.ts, для которого я должен написать примеры модульных тестов. Пожалуйста, помогите мне завершить его.

work.component.spec.ts

 let httpMock: HttpTestingController;
 let injector: Injector;
  let workservice: WorksService;
let saveservice123: SaveService;

 providers: [
        Injector,
        HttpClient,
        HttpClientTestingModule,
        saveService,
        worksService
      ],

  httpMock = TestBed.get(HttpTestingController);
    workservice = TestBed.get(WorksService);
    saveservice123 = TestBed.get(SaveService)

  fit('getting work detsails indivually', async(() => {

    fixture = TestBed.createComponent(worksComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();

    workservice.getworklist(123).subscribe(() =>{});

    const request = httpMock.expectOne("work/v1/works?employeeid=")
    // expect(request.request.method).toBe('httpGet');
    // request.flush(xxxxx);

выдает ошибку ниже

Error: Expected one matching request for criteria "Match URL: work/v1/works?employeeid=", found none.

Пожалуйста, помогите, как узнать, как писать модульные тесты для этого типа .. Я также пытался шпионить,

const mockdata = { id:1, title: "Hello world",  paste: "console.log('Hello world');"}
     const spyOnAdd = spyOn(service, "getworkList").and.returnValue(mockdata);

...