Предпосылки:

Служба http

Рассмотрим простой сервис для получения данных с помощью метода get Http-сервиса.

Начнем с написания тестового примера для этого сервиса.

Настройка модуля тестирования для службы:

Прежде всего, нам нужен экземпляр нашего сервиса, то есть AppService. Мы можем создать его с помощью метода get TestBed.

let service = TestBed.get(AppService);

Но для этого нам также нужно добавить службу к провайдерам этой тестовой среды. Мы сделаем это, настроив модуль тестирования, как мы это делаем при тестировании наших компонентов.

Давайте сделаем это в блоке beforeEach.

Обратите внимание, что у нас нет метода compileComponents. Нам это нужно только для компонентов, поскольку оно преобразует ваши URL-адреса html и css во встроенный код. Кроме того, поскольку нам не нужно его вызывать, нам не нужно оборачивать его в асинхронный блок.

Первый тест, который я всегда добавляю, — это проверка правильности настройки модуля и определения экземпляра нашего класса.

Вы получите сообщение об ошибке:
Ошибка: нет провайдера для Http!

Конечно, когда мы смотрим на AppService, у нас есть объект Http в качестве зависимости. Мы также должны предоставить это. И если вы посмотрите на класс Http, ему нужны два параметра ConnectionBackend и RequestOptions в качестве зависимостей:

constructor(_backend: ConnectionBackend, _defaultOptions: RequestOptions)

Значит, они нам тоже нужны.

Angular упрощает нашу работу, предоставляя объект mock для ConnectionBackend. Просто импортируйте его с BaseRequestOptions в качестве второго параметра в Http Object :

import {MockBackend} from '@angular/http/testing';

import {Http, BaseRequestOptions} from '@angular/http';

Теперь мы будем использовать useFactory, чтобы предоставить экземпляр Http. Если вы не знакомы с этим, вы можете ознакомиться с Документацией Angular по внедрению зависимостей здесь.

Итак, в приведенном выше коде мы настроили, что всякий раз, когда потребуется экземпляр Http, он будет обращаться к этим провайдерам, чтобы выяснить, как создать этот экземпляр. И для этого мы предоставили метод который возвращает объект Http с использованием двух импортированных ранее параметров.

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

Тестирование службы HTTP:

Теперь для тестирования метода getData нам, очевидно, нужно имитировать соединение, которое создает Http и делает http-запрос. Но поскольку мы уже предоставили фиктивный объект ConnectionBackend при предоставлении экземпляра Http, тестовый пример не создаст фактическое соединение.
Также мы можем настроить ответ для каждого HTTP-запроса. Мы сделаем это, используя свойство подключения MockBackend.

Давайте сначала создадим экземпляр mockBackend, используя метод get TestBed:
mockBackend = TestBed.get(MockBackend);

Это наш последний тестовый пример:

В приведенном выше тестовом примере на каждый HTTP-запрос, который делает метод getData, он получит ответ, который мы предоставили.

Мы также можем описать сценарий ошибки, используя метод mockError следующим образом:

Вы можете найти код для этого блога здесь