Как издеваться над сервисом Angular за пределами юнит-тестирования? - PullRequest
0 голосов
/ 04 ноября 2019

Я занимаюсь разработкой приложения Angular, поскольку бэкэнд все еще сильно отстает в разработке. Я создаю альтернативные фальшивые сервисы, которые предоставляют данные из локальных файлов JSON, что позволяет мне тестировать полный интерфейс приложения намоя локальная рабочая станция, не полагаясь на какие-либо внешние ресурсы.

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

Ответы [ 4 ]

1 голос
/ 04 ноября 2019

Вы можете использовать прокси для этого. При запуске angular каждый запрос на localhost: 4200 может быть перенаправлен в любое место с тем же маршрутом. Либо узел-экспресс с поддельными jsons, работающими параллельно, либо другой фиктивный сервер, который у вас может быть.

https://angular.io/guide/build#proxying-to-a-backend-server

1 голос
/ 04 ноября 2019

Лучше использовать независимый mockserver. Таким образом, ваше приложение будет чище и проще для тестирования

1- Вы можете использовать такой сервер узлов, как этот https://www.npmjs.com/package/mockserver-node

сервер узловых узлов будет имитировать заднюю apis,вам нужно будет только дать ему файл json для отправки для каждого http-запроса. Более подробную информацию вы можете найти по адресу http://mock -server.com / .

2- В вашем угловом приложении в файле package.json добавьте новый скрипт, который запуститmockserver и ваше приложение. Пример: «mock: profile»: «npm-run-all --parallel mockserver appmock»

Сценарий «appmock» будет использовать прокси-файл, такой как «proxy.mock.conf.json», который будет пересылать все apiзвонки на mockserver.

Скрипт 'mockserver' предназначен для запуска фиктивного сервера самостоятельно. Это будет похоже на "node ./node/mock-server/mock.server.run.js"

Чтобы запустить режим mock, вам нужно будет запустить приложение только с npm run mock: profile"

0 голосов
/ 04 ноября 2019

Вы можете добавить MockInterceptor в ваше приложение, которое изменяет URL-адрес запроса на путь json ваших поддельных данных. Вы можете добавить этот перехватчик динамически, используя значение production из вашего environment.ts.

0 голосов
/ 04 ноября 2019

Я не уверен, как построены ваши службы, но если у вас есть абстрактная «базовая» служба http, вы можете проверить наличие флага и изменить функцию, выполняющую запрос GET, для получения локальных данных JSON.

что-то вроде:

export class baseHttpService {
    let isMock: boolean = true;

    get(url: string, params: object = {}): Observable<any> { 
        if(!isMock) {
            return /* normal get function */
        } else {
            return this.http.get("your local json file");
        }
    }
}

И в вашей Службе вы вызываете функцию get этой "базовой" службы http:

export class UserService {

    getUser() Observable<any>{
        this.baseHttp.get(/* Api endpoint to get user */).subscribe(...);
    }
}

Таким образом, вы толькоМне нужно переключить один логический тип для проверки всего вашего сервиса.

PS Мне очень нравится идея "прокси" вашего приложения на фиктивном сервере, я чувствую, что это может быть не так простоно это лучший способ решить проблему, если вы хотите изменить свои данные из вашего JSON.

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