Error: [$injector:unpr] Unknown provider: dataProvider <- data

765 views Asked by At

This is my Js code

(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;
                });
        }
    })
})();

This is my Spec.js file

 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();
});});

Getting this error:

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

I don't know why I am getting this error, I have added all the dependency injection that's needed for my project. Can you provide me the solution for this?

3

There are 3 answers

6
Pytth On
  1. You only need one of those beforeEach blocks where you are injecting your services -- though this has nothing to do with your issue.

  2. This one does have to do with your issue -- you are "telling" your test to inject a data component/service/factory when one apparently does not exist in your code. What are you expecting data to be?

0
Deva Anand On
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;
});
1
Deva Anand On
(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']);
        });
});})();