Модульное тестирование Angular — httpBackend JSONP

Я потратил слишком много времени на это. У меня есть простое угловое приложение, которое получает JSONP с удаленного сервера и отображает его на экране.

Мне труднее всего создать модульный тест для него с Жасмин.

Вот мое приложение

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");
   });


});

person ThomasJ    schedule 05.11.2014    source источник


Ответы (1)


Я заметил, что вы забыли httpBackend.flush();, поэтому ответ не исчезнет.

person JC.Li    schedule 05.11.2014
comment
@bencripps Из документа: макет $httpBackend имеет флеш() метод, который позволяет тесту явно очищать ожидающие запросы. Это сохраняет асинхронный API серверной части, позволяя тесту выполняться синхронно. - person JC.Li; 05.11.2014