2014-11-23 2 views
0

Мой фон не в веб-разработке, поэтому моя терминология может быть отключена, извинения.

Короче говоря, у меня есть проблемы с поиском, где $httpBackend обслуживает данные. Этот вопрос заключается в том, чтобы найти исправление, так как он лучше понимает, как работает $httpBackend. Вот подробности.

Я создаю приложение с одной страницей с помощью AngularJS. В качестве сеялки я использую образец сайта AngularJS «Каталог телефонов» на своем веб-сайте, который использует npm и bower.

Мне нужно приложение, чтобы получить доступ к некоторым веб-службам RESTful, которые пока я хочу высмеять. Я наткнулся на ngMockE2E, который я сейчас использую. Поэтому вместо того, чтобы просто загружать основные app.js в мой index.html, теперь загружаю devapp.js, а у меня есть приложение и ngMockE2E в качестве зависимостей: var devapp = angular.module('devapp', ['app', 'ngMockE2E']);.

В devapp я дразнить мой веб-сервиса, например, так:

devapp.run(function($httpBackend) { 
    var items = [{{"id": 1, "price": 5}, {"id": 2, "price": 10}}]; 

    $httpBackend.whenGET('/json/items').respond(items); 

    // let all other requests through to app 
    $httpBackend.whenGET(/^\w+.*/).passThrough(); 
}); 

Теперь, когда я бегу мое приложение и я построю услуги, которые посылают $http вызовы/JSon/пунктов, все работает отлично.

Но я хотел бы видеть вывод в моем фактическом браузере. По какой-то причине я не могу найти URL-адрес!

Мой индекс.html запускается, когда я перехожу на localhost:8000/app/, и большинство адресов для моих партикулов выглядят как localhost:8000/app/#/login и так далее. Но где я должен пойти, чтобы получить форму JSON для моей подделки $httpBackend?

Я попытался localhost:8000/json/items, которая дает мне «Not Available», и localhost:8000/app/#/json/items или localhost:8000/app/json/items, который просто посылает меня к index.html с частичными не загружены, и я попытался каждую комбинацию я мог думать.

ответ

1

Точка $httpBackend предназначена для подделки HTTP-сервера для модульного тестирования. Тем не менее, вы на самом деле не пытаетесь протестировать бэкэнд. Цель состоит в том, чтобы иметь возможность тестировать любой метод, который использует службу $http и возвращает поддельные данные вместо реальных данных сервера.

из Angular.js Documentation:

Когда Угловая приложение нуждается в некоторых данных с сервера, он вызывает службу HTTP $, который посылает запрос к реальному серверу, используя $ httpBackend сервиса.

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

Другими словами, служба $httpBackend не обрабатывает какие-либо маршруты или не возвращает какие-либо данные напрямую, вместо этого изменяется способ, которым $http отвечает на другие модули.Чтобы убедиться, что вы действительно получаете поддельные данные, вам нужно будет создать фактический сервис для ответа на маршрут, который сделает запрос $http этой конечной точке данных.

 Смежные вопросы

  • Нет связанных вопросов^_^