2015-10-21 2 views
0

Как вы возвращаете обещание от httpBackend.when()? Я хотел загрузить некоторые консервированные данные, хранящиеся в файле .json, и вернуть их из httpBackend.whenGET(). Когда я пытаюсь вернуть обещание с http.get ('mydata.json'), ответ возвращается на обратный вызов отказа фабрики.Угловое обещание возврата от httpBackend.when()

function getAvailablePackagesComplete(response) { 
    return response.data; 
} 

function getAvailablePackagesFailed(error) { // {error = Object {data: undefined, status: 0, config: Object, statusText: ""} 
    $log.error(error.data.description); 
    return false; 
} 

function getAvailablePackages() { 
    return $http.get('/1.0/get-available-packages') 
    .then(getAvailablePackagesComplete) 
    .catch(getAvailablePackagesFailed) 
} 


var data = {"package": "test", "version": "1"} 
$httpBackend.whenGET('/1.0/get-available-packages').respond(function(method, url, data) { 
    // return [200,data, {}] // this works 
    return $http.get('app/home/fixtures/mydata.json'); // contains {"package: "test", "version": "1"} 
}); //this doesn't work 

ответ

0

Как в настоящее время, $ httpBackend (от ngMockE2E) делает не обещания поддержки в его .respond - См AngularJS GitHub Issue #11245. Поскольку $httpBackend следует использовать, чтобы избежать настоящих HTTP-запросов, вы можете пропустить некоторые запросы.

От AngularJS Docs:

Этой реализация может быть использована для реагирования с статическими или динамическими откликами, поступающими со, когда апи и его ярлыки (whenGET, whenPOST, и т.д.) и необязательно проходят через запросы к реальному $ httpBackend для конкретных запросов (например, для взаимодействия с определенным удаленным apis или для извлечения шаблонов с веб-сервера).

Чтобы работать вокруг того, что вы пытаетесь сделать, хотя, вы можете попробовать, чтобы getAvailablePackages() вернуть HTTP GET для вашего пути JSON файла и определения $httpBackend.whenGET('pathTo.json').passThrough();

+0

Я хотел сохранить макет бэкенда развязки от запроса, так что я мог бы просто удалить модуль как зависимость, когда фактическая апи была готова. Поэтому, я думаю, мне нужно просто жестко закодировать данные в модульном модуле backend. – neridaj

0

я бил тот же вопрос, и мое использование случай строил макет моего всего API в JS, чтобы другие люди могли работать вне линии и развивать пользовательский интерфейс.

Для этого я разработал плагин под названием angular-mocks-async, который украшает httpBackend и добавляет к нему .whenAsync() APi. Чем вы можете легко имитировали ответы и возвращать обещания так:

var app = ng.module('mockApp', [ 
    'ngMockE2E', 
    'ngMockE2EAsync' 
]); 

app.run([ '$httpBackend', '$q', function($httpBackend, $q) { 

    $httpBackend.whenAsync(
     'GET', 
     new RegExp('http://api.example.com/user/.+$') 
    ).respond(function(method, url, data, config) { 

     var re = /.*\/user\/(\w+)/; 
     var userId = parseInt(url.replace(re, '$1'), 10); 

     var response = $q.defer(); 

     setTimeout(function() { 

      var data = { 
       userId: userId 
      }; 
      response.resolve([ 200, "mock response", data ]); 

     }, 1000); 

     return response.promise; 

    }); 

}]); 
Смежные вопросы