угловой тест jest `toHaveBeenCalledWith` не проходит, как проверить вызовы api url? - PullRequest
2 голосов
/ 30 октября 2019

В моей спецификации теста я хотел бы застраховать 2 материала.

1. dummy data maching with model and get response.
2. find the `api` called with correct url.

Я пробую их, но получаю сообщение об ошибке:

SubsystemServiceService › get susbsytem collection › should call get the subsytem collection

а также я хотел бы обновить мой файл спецификаций, чтобы обеспечить оба моих требования. кто-нибудь, пожалуйста, помогите мне здесь?

вот мой файл spec.ts:

import { TestBed } from '@angular/core/testing';
import { HttpClient } from '@angular/common/http';
import { cold } from 'jasmine-marbles';
import { ModelSubSystem } from './../models/model.subSystem';
import { SubsystemService } from './subsystem-service';

describe('SubsystemServiceService', () => {

    let service: SubsystemService;
    let http: HttpClient;

    const data1 = {
        Id: 0,
        Name: 'subsystem1',
        IsDeletePossible: true,
        CreatedBy: '',
        CreatedDate: new Date(),
        UpdatedBy: '',
        UpdatedDate: new Date(),
        UpdatedByName: '',
        CreatedByName: ''
    } as ModelSubSystem;

    const data2 = {
        Id: 0,
        Name: 'subsystem2',
        IsDeletePossible: true,
        CreatedBy: '',
        CreatedDate: new Date(),
        UpdatedBy: '',
        UpdatedDate: new Date(),
        UpdatedByName: '',
        CreatedByName: ''
    } as ModelSubSystem;

    const subsystems = [data1, data2];

    beforeEach(() => {

        TestBed.configureTestingModule({
            providers: [{ provide: HttpClient, useValue: { get: jest.fn() } }]
        });

        service = TestBed.get(SubsystemService);
        http = TestBed.get(HttpClient);

    });

    describe('get susbsytem collection', () => {

        it('should call get the subsytem collection', () => {

            const response = cold('(-a|)', { a: subsystems });
            http.get = jest.fn(() => response);

            expect(http.get).toHaveBeenCalledWith(`https://ewsanedevaoscmsapi01-as.websites.net/api/SubSystem`);

        });
    });

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

});

1 Ответ

2 голосов
/ 30 октября 2019

Где ваше настоящее действие? В тесте должно быть три вещи

Подготовка

описать ('получить коллекцию susbsytem', () => {

    it('should call get the subsytem collection', () => {

        const response = cold('(-a|)', { a: subsystems });
        http.get = jest.fn(() => response);

Выполнение

Таким образом, вам нужно выполнить какое-то действие и затем проверить результат. Что-то вроде

service.get();

Утверждение

        expect(http.get).toHaveBeenCalledWith(`https://ewsanedevaoscmsapi01-as.websites.net/api/SubSystem`);

    });
});

Пояснение

Представьте, что вы хотите проверить следующий методуслуги:

getSubsystems() {
    // Some code lead
    // ...
    // One path leads to get
    if (some condition)
        return http.get('url');
}

Чтобы протестировать сценарий

it('should call the url when some condition is fulfilled')

, вам необходимо: 1. Настроить условия так, чтобы выполнялось «некоторое условие» 2. Создать макетответ и шпион const response = cold('(-a|)', { a: subsystems }); 3. Создайте экземпляр службы и вызовите код для проверки getSubsystems() 4. Утвердите, что после того, как вы вызвали код, был вызван http.get с ожидаемым аргументом.

Если вы не выполните 3, тестовый фреймворк не знает, какой модуль (метод) выполнить, и поэтому ничего не выполняет.

...