Предпосылки:
Служба 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 следующим образом:
Вы можете найти код для этого блога здесь