Чтобы использовать $ 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();
}
Вы смотрели на https://docs.angularjs.org/api/ngMockE2E/service/$httpBackend? Кроме того, Lineman http://www.linemanjs.com/ имеет опцию stubbing API, которая могла бы достичь чего-то подобного. – glendaviesnz
Я не пытаюсь его протестировать. Это для другой цели. – Francisc
Можно ли включать и выключать '$ httpBackend' во время выполнения? – Francisc