错误:[$ injector:unpr]未知提供程序:dataProvider <-数据

时间:2018-09-21 20:44:09

标签: javascript jasmine karma-jasmine karma-mocha gulp-karma

这是我的Js代码

(function () {
angular.module('app',[])
    .factory('code', function ($http, svc, $q) {
     function getCodeByID(id) {
            return $http.get(svc.get('my-application') + id)
                .then(function (res) {
                    return res;
                });
        }
    })
})();

这是我的Spec.js文件

 describe('MyController', function() {
var data, svc, code;
// Set up the module
//beforeEach(module('app'));
beforeEach(angular.mock.module('app'));
beforeEach(inject(function(_data_) {
    data = _data_;
}));
beforeEach(inject(function(_svc_) {
    svc = _svc_;
}));
beforeEach(inject(function(_code_) {
    code = _code_;
}));
it('Should exist', function() {
    expect(code).toBeDefined();
});});

出现此错误:

Error: [$injector:unpr] Unknown provider: dataProvider <- data
    https://errors.angularjs.org/1.7.4/$injector/unpr?p0=dataProvider%20%3C-%20data
        at node_modules/angular/angular.js:138:12
        at node_modules/angular/angular.js:4905:19
        at Object.getService [as get] (node_modules/angular/angular.js:5065:32)
        at node_modules/angular/angular.js:4910:45
        at getService (node_modules/angular/angular.js:5065:32)
        at injectionArgs (node_modules/angular/angular.js:5090:58)
        at Object.invoke (node_modules/angular/angular.js:5114:18)
        at UserContext.WorkFn (node_modules/angular-mocks/angular-mocks.js:3439:20)
    Error: Declaration Location
        at window.inject.angular.mock.inject (node_modules/angular-mocks/angular-mocks.js:3402:25)
        at Suite.<anonymous> (src/app/epcCodes/epc.spec.js:9:16)
        at src/app/epcCodes/epc.spec.js:2:1

我不知道为什么会收到此错误,我添加了项目所需的所有依赖项注入。 您可以为此提供解决方案吗?

3 个答案:

答案 0 :(得分:0)

  1. 您只需要在其中注入服务的beforeEach块之一-尽管这与您的问题无关。

  2. 这确实与您的问题有关–您正在“告诉”您的测试以在代码中显然不存在的组件/服务/工厂中注入一个data组件。您期望data是什么?

答案 1 :(得分:0)

angular.module('Svc', [])
.factory('Svc', function (Data, $injector, $http) {
    var ConfigData = Data;
    var Svc = {};
    Svc.get = function (key) {
        return ConfigData[key];
    };
    Svc.loadResourcePaths = function (resources) {
        resources.forEach(function (resource) {
            $http.get(Svc.get('security-api') + 'resources?name=' + resource)
                .then(function (response) {
                    if (response.data.totalElements === 1) {
                        ConfigData[resource] = response.data.content[0].href;
                    } else {
                    }
                })
        })
    };
    return Svc;
});

答案 2 :(得分:0)

(function () {
angular
    .module('app', [
        'ConfigSvc',
        'AuthUtils',
        'ngCsv'
    ])

    .constant('APPNAME', 'ui')
    .constant('APPLABEL', 'app_label')
    .constant('APPPREFIX', 'App_name')

    .config(function ($mdThemingProvider) {
        $mdThemingProvider.theme('default')
            .primaryPalette('grey', {'default': '900'})
            .accentPalette('blue', {'default': '400'})
        ;
    })
    .config(function routesConfig($stateProvider, $urlRouterProvider, $locationProvider, $mdAriaProvider) {
        $locationProvider.html5Mode(true).hashPrefix('!');
        $urlRouterProvider.otherwise('/');
        $stateProvider
            .state('home', {
                url: '/',
                template: '<app></app>',
                data: {
                    label: 'Home',
                    icon: 'home',
                    menu: true
                }
            });
    });


angular.element(document).ready(function () {

    var initInjector = angular.injector(['ng']);
    var $http = initInjector.get('$http');

    $http.get('appConfig.json')
        .then(function (response) {
            angular.module('app').constant('Data', response.data);

            return $http.get('appFeatures.json')
        })
        .then(function (response) {

            angular.module('app').constant('ccAppFeatures', response.data);
        })
        .finally(function () {

            angular.bootstrap(document, ['app']);
        });
});})();