2014-07-03 1 views
1

Я хотел бы перехватить все вызовы, сделанные различными службами, и вернуть объект, который объявлен в данных перехватчика a.k.a. hardcoded.

Запрос-перехватчик, предоставляемый функцией «Угловой», похоже, способен изменять и возвращать объект конфигурации HTTP.

Как я могу манипулировать данными, полученными без фактического вызова сервера?

Спасибо.

+0

Вы смотрели на https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend? Кроме того, Lineman http://www.linemanjs.com/ имеет опцию stubbing API, которая могла бы достичь чего-то подобного. – glendaviesnz

+0

Я не пытаюсь его протестировать. Это для другой цели. – Francisc

+0

Можно ли включать и выключать '$ httpBackend' во время выполнения? – Francisc

ответ

0

Чтобы использовать $ httpBackend от MockE2E для предоставления отклик API-ответов, либо для тестирования, либо для предоставления макетного API для разработки клиента, если API-интерфейс сервера недоступен, во-первых, вам нужно включить angular-mocks.js поскольку это содержит ngMockE2E.

Затем вам нужно добавить модуль что-то вроде:

angular.module('mockBackend', [ 'ngMockE2E']) 
    .run(function($httpBackend) { 
     phones = [{name: 'phone1'}, {name: 'phone2'}]; 

     // returns the current list of phones 
     $httpBackend.whenGET('/phones').respond(phones); 

     // adds a new phone to the phones array 
     $httpBackend.whenPOST('/phones').respond(function(method, url, data) { 
     var phone = angular.fromJson(data); 
     phones.push(phone); 
     return [200, phone, {}]; 
    }); 
    $httpBackend.whenGET(/^\/templates\//).passThrough(); 
    //... 
}); 

выше берется из документации на https://docs.angularjs.org/api/ngMockE2E/service/ $ httpBackend - вы должны установить здесь все API конечных точек, которые вы хотите, чтобы вернуться mock data for, а также любые, на которые вы хотите получить реальные данные, например. в приведенном выше случае любые запросы для «шаблонов» используют .passThrough для дальнейшего перенаправления этих запросов на сервер, но возвращает макет данных для вызовов API на «/ phones».

Что касается того, как включить и выключить это, это будет зависеть от того, как вы настроили процесс углового построения. Если вы не хотите все это в производственной версии, которую вы могли бы поставить выше в отдельном файле mockbackend.js и добавьте

angular.module('myApp').requires.push('mockBackend'); 

в нижней части файла - где «MYAPP» будет ваш модуль приложения. Для ваших производственных файлов вы можете создать свой процесс сборки (вручную или автоматически), чтобы удалить угловые mocks.js и mockbackend.js из вашего файла index.html, и все ваши вызовы api вернутся к вызову сервера.

Если вы хотите изменить, используется ли во время разработки макет или нет, вы можете передать константу в модуль mockBackend и использовать это, чтобы решить, возвращаются ли реальные или макетные данные, например. если у вас есть постоянное «DEV», который является простым булевым:

if (DEV === true) { 
    $httpBackend.whenGET('/phones').respond(phones); 
} else { 
    $httpBackend.whenGET(/phones).passThrough(); 
} 
Смежные вопросы