Макет Http получить запрос на модульное тестирование углового сервиса - PullRequest
0 голосов
/ 12 июня 2019

Я хочу знать, как я могу проверить свою сервисную функцию, которая получает http и отправляет вызовы. Я мог настроить файл спецификации, в котором я мог бы создать экземпляр службы, также следуя нескольким сайтам для создания службы mockhttp. Он говорит: «httpMock.expectOne - это не функция»

ссылка отсюда: https://alligator.io/angular/testing-http-interceptors/

describe('Service: UserSearchService', () => {

class AppLookupServiceStub {
    //some functions
}

UserSearchService = new UserSearchService(httpMock,
    appLookUpService);

beforeEach(() => {
    TestBed.configureTestingModule({
        imports: [
            HttpClientTestingModule
          ],
    providers: [
        AppHttpService,
        HttpClient,
        AppCookieService,
        CookieService,
        { provide: AppLookupService, useClass: AppLookupServiceStub },
        AppConstants
    ]
    });
});

beforeEach(async() => {
    service = TestBed.get(UserSearchService);
    httpMock = TestBed.get(AppHttpService);

    selectedCriteria = [
        //some data
    ]
    UserSearchOptions = {
        //some data
    }
});

it('should have a service instance', () => {
    expect(service).toBeDefined();
});
it('should make expected calls to getUserSerachOptions', inject(
    [AppHttpService, UserSearchService],
    (
      httpMock: AppHttpService,
      dataService: UserSearchService
    ) => {
    // let spy = spyOn(service, 'getUserSerachOptions');
    // UserSearchService.getUserSerachOptions();
    // expect(spy).toBeDefined();

    dataService.getUserSerachOptions().subscribe(UserSearchOptions => {
        expect(UserSearchOptions).toEqual(UserSearchOptions);
    });

    const req = httpMock.expectOne(`AppConstants.ADMIN_CENTRAL_SELECTION_CRITERIA_URL`);
    expect(req.request.method).toBe("GET");
    req.flush(UserSearchOptions);
}));
it('should get the data successful', () => {
    service.getUsersBySelectionCriteria(selectedCriteria[0]).subscribe((data: any) => {
        console.log(data);
      expect(data.country.name).toBe('Australia');
    });
});

})

Спецификация теста для обслуживания:

getUserSerachOptions(): Observable<UserSearchOptions> {
if (!this.userSearchCriteriaOptions) {

    return this.appHttpService.get('{apiUrl}/xyzproject/{devKey}/userSelectionCriteria').pipe(map(
      (data: UserSearchOptions) => {
        this.userSearchCriteriaOptions = data;
        return  this.userSearchCriteriaOptions;
      }
    ));
}

return of( this.userSearchCriteriaOptions);
}

Как мне посмеяться над вызовом, я не могу найти источники в этом случае.

1 Ответ

0 голосов
/ 12 июня 2019

я думаю, что это неправильно

 httpMock = TestBed.get(AppHttpService);

должно быть

 httpMock = TestBed.get(HttpTestingController);

httpMock - это HttpTestingController , попробуйте это

import { HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';


describe('Service: UserSearchService', () => {
  let httpMock: HttpTestingController;

 beforeEach(async(() => {
 TestBed.configureTestingModule({
  imports: [
    RouterTestingModule.withRoutes([]),
    HttpClientTestingModule
  ],
  declarations: [Component],
  providers: [

  ],
  schemas: [CUSTOM_ELEMENTS_SCHEMA]
 }).compileComponents();
 fixture = TestBed.createComponent(Component);
 component = fixture.componentInstance;
 httpMock = injector.get(HttpTestingController); // change it here
}));

твой тест

it('should make expected calls to getUserSerachOptions', inject([HttpTestingController],
  (httpTestMock: HttpTestingController) => {

 httpMock.expectOne(...)  // this should work now
 ...
}
...