AngularJS控制器的Jasmine单元测试

时间:2014-06-09 21:28:50

标签: angularjs unit-testing controller jasmine

我正在尝试使用Jasmine对AngularJS中的控制器进行单元测试。控制器的语法与我能找到的大多数文档略有不同,我收到此错误... http://errors.angularjs.org/1.2.15/ $注射器/ unpr?P0 = propertiesProvider%20%3 C-%20properties

控制器......

myApp.controller('myController', function($scope, $rootScope, param) {

    param.info.get().then(function(example){
        //...
    });

});

测试js ......

describe('myApp', function() {
    var $scope, $rootScope, param, createController, properties;
    beforeEach(module('myApp'));

    debugger; //runs

    beforeEach(inject(function($injector) {

        debugger; //doesn't run

        $rootScope = $injector.get('$rootScope');
        properties = $injector.get('properties');
        param = $injector.get('param');
        $scope = $rootScope.$new();
        var $controller = $injector.get('$controller');

        createController = function() {
            return $controller('myController', {
                '$scope': $scope,
                '$rootScope':$rootScope,
                'properties':properties,
                'param':param,
            });
        };
    }));

    var a;

    it('should pass this basic test no matter what', function() {
        a = true;

        expect(a).toBe(true);
    });
});

Param定义......

myApp.factory("param", function($http) {
return {
    info: {
        get: function() {
            return $http.get(myApp.url("/param/info")).then(function(response) {
                return response.data.data;
            });
        }
    }
}

... myApp.run

myApp.run(['$http', '$rootScope', 'properties', function($http, $rootScope, properties){
...
}]);

1 个答案:

答案 0 :(得分:0)

如果您仔细查看错误,则会在propertiesProvider中显示错误,您在测试中注入了properties,因此它正在寻找propertiesProvider而不是{39}}存在。所以它会抛出错误。

如果propertiesangular Service并且您正在控制器中注入它,那么在测试时您无需再次将该服务注入您的测试,角度模拟可以解决这个问题。

我建议你使用npm package generator-yosapy来引导你的控制器测试