Mock (ненастоящий)

Mock сервисы используются для прототипирования на начальном этапе разработки или тестирования. Главный принцип использования mock это сделать ваш сервис создающий точно такое же API как то что он заменяет. Для примера, если вы создаете REST сервис, то mock сервис должен так же быть асинхронным как и настоящие REST API сервис. Так же mock сервис и настоящий сервис должны быть легко взаимозаменяемые в любой момент.

Использования Promises

Promises стандарт де-факто для создания асинхронных процессов в JavaScript. Далее приведем пример использования mock сервиса.
В начале создадим фейкую коллекцию данных. Назовем файл mock-properties. Пример файла …
(не забудьте заменить троеточье на интересные вам данные):

Далее приведем пример использования данных с Promise назовем файл property-service.js:

Подрожая традиционным REST сервисам мы создали метод findAll описанный в ES2015 Promise. Страницы и компоненты могут вызывать findAll() и обрабатывать результат возвращаемый Promises как в следующем примере в методе ngOnInit:

Использование Observables

Проблема с предыдущем примером это то что в Angular 2 методы объекта http (get, post, put, и т.п.) не возвращает Promises, они возвращают объект Observables (реализованный библиотекой RxJS). Если mock сервис будет возвращать Promises а REST сервис будет возвращать Observables они не будут взаимозаменяемы. Есть два решения этой проблемы:

  1. Стандартизация на основе Promise-based API: В реализации REST сервиса конвертить возвращаемый Observables объект в Promises. Это может быть сделано используя функцию Observable.toPromise()
  2. Стандартизация на основе Observable-based API: В реализации Mock сервиса, возвращаем Observables объект вместо Promises.

Пример реализации mock сервиса который возвращает Observable объект, файл property-service.js:

И пример его использования в property-list.js:

Не забываем что для использования сервисов в Angular 2 необходимо их объявить в списке providers:

 

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on VK