2014-11-23 3 views
0

내 배경이 웹 개발에 있지 않으므로 내 용어가 유용하지 않을 수 있습니다. 사과드립니다.

즉, $httpBackend이 데이터를 처리하는 위치를 파악하는 데 문제가 있습니다. 이 질문은 수정 방법을 찾는 것에 관한 것입니다. $httpBackend이 일반적으로 어떻게 작동하는지 더 잘 이해하는 것입니다. 자세한 내용은 여기를 클릭하십시오.

AngularJS를 사용하여 단일 페이지 앱을 제작할 예정입니다. 씨 뿌리는대로 npm과 bower를 사용하는 AngularJS "Phone Catalog"샘플 프로젝트를 웹 사이트에서 사용하고 있습니다.

당분간 모의하고 싶은 몇 가지 RESTful 웹 서비스에 액세스하려면 앱이 필요합니다. 나는 지금 사용하고있는 ngMockE2E를 보았습니다. 따라서 index.html에 기본 app.js를로드하는 대신 내 응용 프로그램과 ngMockE2E가 종속성 인 devapp.js도로드 중입니다. 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(); 
}); 

를 지금은 내 응용 프로그램을 실행하고 나는/JSON/항목, 모든 것이 잘 작동 $http 통화를 보내 서비스를 빌드 할 때.

하지만 실제 브라우저에서 출력을보고 싶습니다. 웬일인지 URL을 찾을 수없는 것 같습니다!

localhost:8000/app/에 가면 내 index.html이 나오고, 내 부분 용 주소는 대부분 localhost:8000/app/#/login처럼 보입니다. 하지만 어디에서 JSON 양식을 가져 가야합니까? $httpBackend?

난 그냥로드 된 부분 지문 내 index.html을 저를 보낸다 "사용할 수 없음"저를 제공 localhost:8000/json/itemslocalhost:8000/app/#/json/items 또는 localhost:8000/app/json/items을 시도하고, 나는 내가 생각할 수있는 모든 조합을 시도했습니다.

답변

1

$httpBackend의 요점은 단위 테스트를 위해 HTTP 백엔드를 위장하는 것입니다. 실제로 백엔드를 테스트하려고하지는 않습니다. 목표는 서비스를 사용하여 $http 서비스를 테스트하고 실제 서버 데이터 대신 가짜 데이터를 반환하는 것입니다. Angular.js Documentation에서

는 :

각도 응용 프로그램이 서버에서 일부 데이터를 필요로

, 그것은 $ httpBackend를 서비스를 사용하여 실제 서버에 요청을 보내는 $ HTTP 서비스를 호출합니다.

본질적으로, $httpBackend.whenGET() 기능은 서버에 대한 모든 호출을 처리하기 전에 평가를 가져옵니다 $http 서비스에 후크입니다. $http을 사용하여 전화를 걸면 사용자가 제공 한 경로 규칙과 일치하면 가짜 데이터가 다시 전송됩니다. 이렇게하면 평소와 같이 컨트롤러를 작성하고 테스트 한 다음 테스트 된 컨트롤러에 영향을주지 않고 가짜 데이터 스텁을 제거 할 수 있습니다.

다른 말로하면 $httpBackend 서비스는 경로를 처리하거나 데이터를 직접 반환하지 않고 대신 $http이 다른 모듈에 응답하는 방식을 변경합니다.가짜 데이터를 실제로 확인하고 있는지 확인하려면 해당 데이터 끝점에 대한 $http 요청을하는 경로에 응답 할 실제 서비스를 만들어야합니다.