У меня есть служба под названием page.service.ts
. Я хочу проверить его loadPage(path: string)
метод. Но я не могу выполнить блок subscribe
из файла спецификации. Когда я запускаю тест, я вижу load Page called
, напечатанный на консоли, но Subscribe is being executed
никогда не печатается.
Пожалуйста, смотрите файл сервиса и спецификации ниже:
import { Injectable } from '@angular/core';
import { Page } from '../models/page.model';
import { environment } from '../../environments/environment';
import { HttpClient } from '@angular/common/http';
import { BehaviorSubject, Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class PageService {
public currentPath: string;
public page = new BehaviorSubject<Page>(null);
constructor(private http: HttpClient) {}
public loadPage(path: string) {
this.currentPath = path;
console.log('load Page called');
const request_url = environment.apiBaseURL + 'api/structure/page/';
console.log(request_url);
const request = this.http.get(request_url, {
params: {
path: this.currentPath + '/'
}
});
request.subscribe(
(results: any) => {
console.log('Subscribe is being executed');
const p = new Page().deserialize(results);
p.path = path;
this.page.next(p);
}
);
}
isActivePage(page: Page) {
return this.currentPath === page.path;
}
}
файл спецификации:
import { TestBed, fakeAsync, flush, tick } from '@angular/core/testing';
import { PageService } from './page.service';
import { HttpClientTestingModule, HttpTestingController } from '../../../node_modules/@angular/common/http/testing';
import { environment } from '../../environments/environment';
import PAGES from './mock-data/page.service.mock.spec';
fdescribe('PageService', () => {
let pageSrv: PageService,
httpTestingController: HttpTestingController;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpClientTestingModule],
providers: [
PageService
]
});
pageSrv = TestBed.get(PageService);
httpTestingController = TestBed.get(HttpTestingController);
});
it('should be created', () => {
const service: PageService = TestBed.get(PageService);
expect(service).toBeTruthy();
});
fit('should load page', fakeAsync(() => {
const r = PAGES.NewsItem1
pageSrv.loadPage('/news-announcements/article/announcement/');
// flush();
tick(5000);
const req = httpTestingController.expectOne(environment.apiBaseURL + 'api/structure/page/');
console.log('running expect');
expect(req.request.method).toEqual("GET");
req.flush({r});
}));
});