在AngularJS中编写解析函数的单元测试

时间:2014-05-18 17:34:46

标签: angularjs unit-testing jasmine code-coverage

我有以下代码。当我运行单元测试时,我发现解析函数不是代码覆盖的。

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
      when('/', {
          controller: 'HomeCtrl',
          resolve: {
              homePage: function (homePageLoader) {
                  return homePageLoader();
              }
          },
          templateUrl: 'views/home.html'
      }).
      otherwise({ redirectTo: '/' });
}]);

如何为resolve函数编写单元测试?

1 个答案:

答案 0 :(得分:0)

我的app.js与routeprovider&解决。这可以通过以下方式解决:

<强> app.js

var appModule = angular.module('myApp',['ngRoute'])
.config(['$httpProvider', '$routeProvider', '$locationProvider', '$translateProvider', function ($httpProvider, $routeProvider, $locationProvider, $translateProvider) {

$locationProvider.html5Mode(true)

$routeProvider
    .when('/services/main', {templateUrl: '/services/main/html/main.html', controller: 'MainCtrl', resolve: {
        myVar: function (varService) {
            return varService.invokeService();
        }
    }})
}])

规范文件

describe("Unit Testing: config - ", function() {

var appModule;
var mockService;

beforeEach(function() {
    appModule = angular.mock.module("myApp");
});

it('should test routeProvider resolve', function() {

    mockService = {
            invokeService: jasmine.createSpy('invokeService').andReturn('myVar')
    };

    module(function($provide){
          $provide.value('varService', mockService);
    });

    inject(function($route, $location, $rootScope, $httpBackend) {
        $httpBackend.expectGET('/services/main/html/main.html').respond({});
        $location.path('/services/main');
        $rootScope.$digest();
        expect($route.current).toBeDefined();

      });
    }); 
});

这确保了解决方案的覆盖范围。