Модульное тестирование службы Angular2 + с помощью встроенного сервера-сервиса - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь написать модульные тесты впервые.До сих пор я был в состоянии написать тесты для «обычных» / интерна сервисов.Теперь я застрял с более сложным Сервисом:

@Injectable()
export class BaseToolsService {

vehicles: Array<Vehicle>;
tools: BehaviorSubject<Array<Tool>> = new BehaviorSubject<Array<Tool>>(undefined);
noBaseTools: BehaviorSubject<Array<Tool>> = new BehaviorSubject<Array<Tool>>(undefined);
vehiclesWithBaseTools: BehaviorSubject<Array<VehicleBaseToolsModel>> = new BehaviorSubject<Array<VehicleBaseToolsModel>>(undefined);

constructor(private readonly toolService: ToolService,
            private readonly vehicleService: VehicleService,
            private readonly notificationService: NotificationService) {
    forkJoin([this.toolService.getTools('Asset,ToolType'),
        this.vehicleService.getVehicles('Asset,VehicleModel')]).subscribe(results => {
        this.tools.next(results[0]);
        this.vehicles = results[1];
        this.filterToolsAndConvertVehicles();
    });
} 

...

Моя настройка модульного теста до сих пор:

import {BaseToolsService} from './base-tools.service';
import {ToolService} from '../../../../core/services/api/tool.service';
import {VehicleService} from '../../../../core/services/api/vehicle.service';
import {NotificationService} from '../../../../core/services/intern/notification/notification.service';
import {async, getTestBed, TestBed} from '@angular/core/testing';

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

        let service: BaseToolsService;

        beforeEach(async(() => {
            TestBed.configureTestingModule({
                providers: [
                    ToolService,
                    VehicleService,
                    NotificationService,
                    BaseToolsService
                ]
            });
            const testBed = getTestBed();
            service = testBed.get(BaseToolsService);
        }));

    ...
    // Some Tests

Проблема в том, что Сервисы ToolService и VehicleService попытаться получить ответ сервера.Поскольку они встроены в BaseToolsService, я не знаю, как имитировать запрос / бэкэнд сервера или как самим имитировать требуемые данные и не допустить обращения служб к серверу.Когда я запускаю тест, он, конечно, завершается с ошибкой Failed: Http failure response for (unknown url): 0 Unknown Error.

Есть ли способ, которым я могу высмеять ответ сервера, который на один уровень глубже, чем сервис, который я хочу протестировать?Или проблема где-то еще?(Поскольку я новичок в модульных тестах, я сомневаюсь, что все сделал правильно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...