2014-11-05 5 views
0

나는 이것에 너무 많은 시간을 할애했습니다. 원격 서버에서 JSONP를 가져 와서 화면에 표시하는 간단한 각도 응용 프로그램이 있습니다.각도 단위 테스트 - httpBackend JSONP

Jasmine을 사용하여 단위 테스트를 만드는 데 가장 힘든 시간을 보내고 있습니다.

여기 여기

var pdApp = angular.module('pdApp', []); 
pdApp.controller('pdController', function ($scope, $http) { 

    var jsonpUrl = "http://10.1.20.377/products/1/167?cb=JSON_CALLBACK"; 


    $http.jsonp(jsonpUrl).success(function(data) { 

    $scope.pageContent = data.pageContent; 
    $scope.cartContent = data.cartContent; 
    $scope.content = data.productContent; 

    }); 

}); 

내 앱

입니다 그리고 나의 단위 테스트

describe('myTest', function() { 

    var MainCtrl, scope, httpBackend; 

    beforeEach(module('pdApp')); 

    module('pdApp', function($provide) { 
    $provide.value('DefaultContent', defaultJSON); 
    }); 

    beforeEach(inject(function($controller, $rootScope, $httpBackend) { 
    httpBackend = $httpBackend; 
    scope = $rootScope.$new(); 
    MainCtrl = $controller('pdController', { 
     $scope: scope 
    }); 
    })); 


    it("Product name should be set", function(){ 
    httpBackend.whenJSONP("/products/1/167").respond(
     { 
      "name" : "Prod Name", 
      "desc" : "Long Description Here" 

     } 
    ); 
    expect(scope.pageContent.name).toEqual("Prod Name"); 
    }); 


}); 

답변

1

나는 응답이 플러시되지 않도록 당신의 httpBackend.flush();를 잊어 버린 것을 알 수있다.

+0

자세한 정보를 제공 할 수 있습니까? – bencripps

+1

@bencripps [문서] (https://docs.angularjs.org/api/ngMock/service/$httpBackend) : "mock $ httpBackend에는 테스트가 보류중인 요청을 명시 적으로 플러시 할 수있게하는 flush() 메서드가 있습니다. 이것은 백엔드의 비동기 api를 보존하는 동시에 테스트가 동 기적으로 실행되도록합니다. " –

관련 문제