Angular 8 Jasmine не соответствует HTTP-запросу - PullRequest
0 голосов
/ 15 октября 2019

У меня есть служба Angular, делающая некоторые HTTP-запросы, и я хочу проверить, что она делает их правильными.

Среди ее зависимостей также есть EnvironmentService, который возвращает правильные конечные точки API в соответствии св среду, которую я высмеял с Жасмин.

Мой тест выглядит следующим образом:

describe('ShipmentsService', () => {

    let httpTestingController: HttpTestingController;
    let service: ShipmentsService;
    const envSpy = jasmine.createSpyObj('EnvironmentService', ['getRestEndpoint', 'dev']);

    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [
                ShipmentsService,
                {provide: EnvironmentService, useValue: envSpy}
            ],
            imports: [HttpClientTestingModule]
        });

        httpTestingController = TestBed.get(HttpTestingController);
        service = TestBed.get(ShipmentsService);
    });

    it('does the right HTTP request', () => {
        envSpy.getRestEndpoint.and.returnValue('foo');
        service.doStuff(123);
        expect(envSpy.getRestEndpoint)
            .toHaveBeenCalledWith('changePackingProperties');

        const request = httpTestingController.expectOne('foo');
        request.flush({shipmentId: 123});
        httpTestingController.verify();    
    });
});

А вот мой метод ShipmentsService:

doStuff(shipmentId: number) {
    let path = this.environmentService.getRestEndpoint('changePackingProperties');
    return this.http.post(path, body, {headers}).pipe(map(
      (response) => response
    ));
}

Чего мне не хватает?

1 Ответ

0 голосов
/ 15 октября 2019

Чего не хватало, так это того, что мой метод обслуживания действительно возвращал Observable, поэтому для его завершения тест должен быть subscribe d.

Чтобы тест работал, затемфактический сервисный звонок должен быть

service.doStuff(123).subscribe(() => {});
...