Цитата:
|
В npm куча пакетов типа mock-require, которыми подменяешь зависимости. По опыту скажу, что это даже проще чем делать моки для первого Ангуляра (со вторым не пробовал еще).
|
Конкретно в данной ситуации, этот вариант -- худший из возможного, потому что он требует от разработчика собственной реализации класса HttpClient (чтобы в mockExports подменять экспорт модуля @angular/common/http). А так как будет подменяться весь экспорт модуля http на наш, то нам придется реализовывать не только класс HttpClient, но и остальные экспортируемые сущности, которых
очень много.
Более лучший вариант -- это использовать spy.
// наш сервис
export class Service {
getData() {
return new HttpClient().get('/url');
}
handleResponse(res: HttpResponse) {
// как-то обрабатываем ответ
}
makeRequest() {
this.getData().map(this.handleResponse.bind(this)).subscribe()
}
}
// тесты
it('blabla', () => {
const service = new Service();
spyOn(service, 'getData').and.returnValue(Observable.of(['Test1', 'Test2']))
})
Но использовать MockBackend заглушку лучше, потому что я могу протестировать своё апи с правильными параметрами, по правильному адресу и т.д. А шпионов обычно используют когда тестируют контроллер, и вместо вызова метода сервиса, возвращают заранее подготовленные данные и смотрят как эти данные, например, отрисовываются в DOM.
Цитата:
|
DI во втором Ангуляре это не одна строчка кода (дело тут совсем не в строчках), а три места, где нужно не забыть написать код, если хочешь подключить сервис: импорт, массив провайдеров и конструктор.
|
Angular-cli решает проблему. Ну то есть просто в консоли пишем ng g service Blablabla и он сам расставит нужные импорты, запишет в провайдеры и т.д.