Angular 5 (тестирование кармы / жасмина) - использование фиктивного бэкэнда для имитации ответов об ошибках для сообщений об ошибках - PullRequest
0 голосов
/ 12 сентября 2018

Я не совсем понимаю, как работает функция MockBackend, как описано здесь 1002 *. Я совершенно новичок в Angular.

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

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

Один из примеров - когда пользователя просят заполнить форму продаж, и после ее отправки сервер обнаруживает ошибку и отправляет ответ 500 Internal Server Error, который затем отображает сообщение об ошибке сервера. 1009 *

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

Если я запрограммирую свой набор тестов для использования класса MockBackend из '@ angular / http / testing', приведет к тому, что мои HTTP-запросы ко всем компонентам Angular будут отправляться на этот фиктивный внутренний сервер вместо действительного внутреннего сервера сервер

РЕДАКТИРОВАТЬ: Это случай того, что я имею в виду . При использовании MockBackend некоторые тесты, требующие отправки HTTP-запросов на фактический сервер , отправляться не будут.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я считаю насмешливый httpclient запахом кода.Я предпочитаю создавать свои собственные классы API, которые обертывают http или httpClient.Затем в своих модульных тестах вы можете использовать шпион jasmin для возврата данных, необходимых для ваших тестов.

см. Этот пример https://angular.io/guide/http

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class ConfigService {
  constructor(private http: HttpClient) { }
}

configUrl = 'assets/config.json';

getConfig() {
  return this.http.get(this.configUrl);
}

затем в ваших тестах (псевдокод, донне помню синтаксис):

spyOn(configService, 'getConfig').and.returnValues({data:123});
0 голосов
/ 12 сентября 2018

Поправьте меня, если я не прав, судя по вашему описанию, я предполагаю, что вы используете модуль http.Можно рассмотреть возможность обновления до модуля httpClient, для которого тестирование на наличие ошибок на сервере довольно просто: https://angular.io/guide/http#testing-for-errors

Кстати, модульные тесты должны быть автономными.Вы должны смоделировать все зависимости (возможно, поставщики для вашего модуля тестирования) и не отправлять какие-либо запросы на реальный сервер.И информацию, и коды состояния можно смоделировать с помощью http-модуля тестирования .

...