2014-11-05 93 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 2014-11-05 01:44:32

+1

@bencripps从[document](https://docs.angularjs.org/api/ngMock/service/$httpBackend):“模拟$ httpBackend有一个flush()方法,它允许测试显式地刷新挂起的请求。这保留了后端的异步api,同时允许测试同步执行。“ – 2014-11-05 02:19:30