Angular8 сервисный блок тест - PullRequest
1 голос
/ 31 марта 2020

В моем проекте в папке share есть sharedService, который вызывается во всех сервисах. Фактически, мои службы отправляют свой запрос на этот sharedService, а sharedService отправляет http-запрос в соответствии с полученным URL-адресом. Как мне написать unitTest для моих сервисов?

sharedService имеет метод Api:

import { Injectable } from "@angular/core";
import { Observable } from "rxjs";
import { HttpClient } from '@angular/common/http';

@Injectable({
  providedIn: "root"
})

export class SharedService {

  constructor(
    private httpClient: HttpClient) {
  }


  Api(method, url): Observable<any> {
    this.httpClient.request(method, url).subscribe( );
  }

}

usersService в модуле пользователей отправляет свой запрос в Метод API в sharedService:

import { Injectable } from '@angular/core';
import { SharedService } from 'app/shared/services/shared.service';

@Injectable({
  providedIn: 'root'
})
export class usersService {

  constructor(private sharedService:SharedService) { }

  GetUsers() {
    return this.sharedService.Api('get' , 'url');
  }
}

Как мне написать для юзера ServiceTest unit?

1 Ответ

2 голосов
/ 31 марта 2020

Пожалуйста, попробуйте вот так. SharedService возвращает массив имени пользователя для этого примера.

describe('usersService ', () => {
  let userService;
  let sharedService;
  beforeEach(() =>
    TestBed.configureTestingModule({
      imports: [
        HttpClientTestingModule,
      ],
      providers: [
        SharedService,
        UsersService
      ]
    })
  );

  beforeEach(() => {
    userService = TestBed.get(UsersService);
    sharedService = TestBed.get(SharedService);
  });

  it('should be created', () => {
    expect(userService).toBeTruthy();
  });

  it('should test GetUsers()', () => {
    spyOn(sharedService, 'Api').and.returnValue(of(['user 1', 'user2']));
    userService.GetUsers().subscrbe(data => {
      expect(sharedService.Api).toHaveBeenCalled()
      expect(data).toEqual(['user 1', 'user2'])
    })
  })

})
...