AngularJS控制器的Jasmine单元测试

AngularJS控制器的Jasmine单元测试,angularjs,unit-testing,controller,jasmine,Angularjs,Unit Testing,Controller,Jasmine,我正在尝试使用Jasmine对AngularJS中的控制器进行单元测试。控制器的语法与我能找到的大多数文档稍有不同,我发现这个错误。。。 $injector/unpr?p0=属性提供程序%20%3C-%20属性 控制器 myApp.controller('myController', function($scope, $rootScope, param) { param.info.get().then(function(example){ //... });

我正在尝试使用Jasmine对AngularJS中的控制器进行单元测试。控制器的语法与我能找到的大多数文档稍有不同,我发现这个错误。。。 $injector/unpr?p0=属性提供程序%20%3C-%20属性

控制器

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);
    });
});
参数定义

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(['$http', '$rootScope', 'properties', function($http, $rootScope, properties){
...
}]);

如果仔细查看错误,它会在
propertiesProvider
中显示error,您正在测试中注入
properties
,因此它会查找不存在的
propertiesProvider
。所以它抛出了错误

如果
properties
是一个
angular服务
,并且您正在控制器中注入该服务,那么在测试时您不需要再次将该服务注入到测试中,angular mock会处理该问题


我建议您使用npm包
generator yosapy
引导控制器测试

您的
param
定义是什么样的?您在代码中的何处注入了
属性
服务?请确保包含param服务的文件已由加载karma@ExpertSystem我添加了参数定义。我不认为我在任何地方注入了属性,你能解释一下吗?@j_buckley:根据你得到的错误,似乎在某个地方注入了
属性
,而错误在于无法找到
属性
服务的实现。在代码库中搜索“属性”。@ExpertSystem好的,我明白你的意思。我用属性注入更新了代码。但是,我添加了两个调试器,但第一个运行,第二个不运行。您是否看到每个(inject(function($injector){)之前的
有问题?我还包括了myApp.run,它看起来像
属性
的来源。