web-dev-qa-db-fra.com

Fournisseur inconnu CookieStore

Je rencontre un service pour lequel je souhaite utiliser le module $ cookieStore. Cela fonctionne bien, mais lors des tests unitaires, il se déchire et donne l’erreur suivante: "$ cookieStoreProvider <- $ cookieStore <- filtersService".

Le service ressemble à ceci:

serviceModule.factory('filtersService', ['$rootScope', '$location', '$cookieStore', function($rootScope, $location, $cookieStore){
    return {
        getFilters: function(){...}
}

Et le service de test unitaire ressemble à ceci:

describe('filtersService tests', function(){
var filtersService;
beforeEach(module('App.services'));

beforeEach(inject(function(filtersService, urlService, $location){

    filtersService = filtersService;
    urlService = urlService;
}));

it('test something', inject(function(filtersService, $location){
    filtersService.getFilters();
   expect(...something...)
}));
});

J'ai inclus les cookies angulaires dans le fichier de test de karma.

Toute idée pourquoi le code fonctionne lors de l'exécution, mais unittests échoue?

Mettre à jour:

Karma Config File:
// Karma configuration
// Generated on Sun May 12 2013 16:57:21 GMT+0200 (CEST)


// base path, that will be used to resolve files and exclude
basePath = '../';


// list of files / patterns to load in the browser
files = [
  JASMINE,
  JASMINE_ADAPTER,
  'test/karma/jquery-1.9.1.min.js',
  'app/assets/javascripts/sugar-1.3.9.min.js',
  'app/assets/javascripts/angular.js',
  'app/assets/javascripts/angular-*.js',
  'app/assets/javascripts/ui-bootstrap-tpls-0.4.0.min.js',
  'app/assets/javascripts/services.js',
  'test/karma/lib/angular/angular-mocks.js',
  'test/karma/unit/*/*.js'
];


// list of files to exclude
exclude = [

];


// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];


// web server port
port = 9876;


// cli runner port
runnerPort = 9100;


// enable / disable colors in the output (reporters and logs)
colors = true;


// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_INFO;


// enable / disable watching file and executing tests whenever any file changes
autoWatch = true;


// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];


// If browser does not capture in given timeout [ms], kill it
captureTimeout = 60000;


// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun = false;
9
Dofs

D'après les commentaires ci-dessus, il semble que la dépendance à 'ngCookies' soit déclarée dans un module séparé.

Pour résoudre ce problème, essayez de le déclarer dans votre module de service:

var serviceModule = angular.app('App.services', ['ngCookies']);

C'est le moyen recommandé pour résoudre ce problème.

Si, pour une raison quelconque, vous ne pouvez pas modifier la définition de serviceModule, vous pouvez également la déclarer à nouveau dans vos tests unitaires:

beforeEach(module('ngCookies','App.services'));

Cependant, je vous recommanderais de le changer dans votre base de code pour que votre serviceModule ne dépende pas de votre module principal de l'application pour qu'il fonctionne correctement.

30
Clark Pan

J'ai eu un problème similaire lors de l'utilisation d'angular-cookies et d'angular-file-upload. Je l'ai résolu de cette façon:

Tout d’abord, j’ai vérifié toutes les dépendances de mon application avec bower list:

-bash-4.1$ bower list
bower check-new     Checking for new versions of the project dependencies..
 APPNAME#0.0.0 /home/git/APPNAME/test.git
 ├── angular#1.2.28 (1.4.4-build.4150+sha.39ff333 available)
 ├─┬ angular-bootstrap#0.11.2 (latest is 0.13.2)
 │ └── angular#1.2.28 (1.4.4-build.4150+sha.39ff333 available)
 ├─┬ angular-cookies#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
 │ └── angular#1.2.28 incompatible with 1.4.3 (1.4.3 available, latest is 1.4.4-build.4150+sha.39ff333)
 ├─┬ angular-file-upload#1.2.0
 │ └── angular#1.2.28 (1.2.29-build.592+sha.b041b66 available, latest is 1.4.4-build.4150+sha.39ff333)

Comme vous le verrez, bower me parle de l'incompatibilité entre les versions angulaires 1.2.28 et 1.4.3, nous avons donc un problème de bibliothèque. Même chose pour les cookies angulaires et les fichiers angulaires.

Après cela, j'ai juste décidé de nettoyer tous mes répertoires bower_components avec rm -fr bower_components et d'exécuter un nouveau bower install pour m'assurer que toutes les bibliothèques sont "fraîchement installées".

-bash-4.1$ rm -fr bower_components
-bash-4.1$ cd ..
-bash-4.1$ cd ..
-bash-4.1$ bower install
bower jquery#~1.11.0            cached git://github.com/jquery/jquery.git#1.11.3
bower jquery#~1.11.0          validate 1.11.3 against git://github.com/jquery/jquery.git#~1.11.0
bower es5-shim#~3.0.1           cached git://github.com/es-shims/es5-shim.git#3.0.2
bower es5-shim#~3.0.1         validate 3.0.2 against git://github.com/es-shims/es5-shim.git#~3.0.1
bower angular-resource#>=1.2.*  cached git://github.com/angular/bower-angular-resource.git#1.4.3
bower angular-resource#>=1.2.*         validate 1.4.3 against git://github.com/angular/bower-angular-resource.git#>=1.2.*
bower angular-cookies#>=1.2.*            cached git://github.com/angular/bower-angular-cookies.git#1.4.3
bower angular-cookies#>=1.2.*          validate 1.4.3 against git://github.com/angular/bower-angular-cookies.git#>=1.2.*
bower angular-sanitize#>=1.2.*           cached git://github.com/angular/bower-angular-sanitize.git#1.4.3
bower angular-sanitize#>=1.2.*         validate 1.4.3 against git://github.com/angular/bower-angular-sanitize.git#>=1.2.*
bower bootstrap#~3.1.1                   cached git://github.com/twbs/bootstrap.git#3.1.1
bower bootstrap#~3.1.1                 validate 3.1.1 against git://github.com/twbs/bootstrap.git#~3.1.1
bower bootstrap-sass-official#~3.1.1     cached git://github.com/twbs/bootstrap-sass.git#3.1.1+2
bower bootstrap-sass-official#~3.1.1   validate 3.1.1+2 against git://github.com/twbs/bootstrap-sass.git#~3.1.1
bower lodash#~3.9.3                      cached git://github.com/lodash/lodash.git#3.9.3
bower lodash#~3.9.3                    validate 3.9.3 against git://github.com/lodash/lodash.git#~3.9.3
bower angular-socket-io#~0.6.0           cached git://github.com/btford/angular-socket-io.git#0.6.1
bower angular-socket-io#~0.6.0         validate 0.6.1 against git://github.com/btford/angular-socket-io.git#~0.6.0
bower angular-ui-router#~0.2.10          cached git://github.com/angular-ui/ui-router.git#0.2.15
bower angular-ui-router#~0.2.10        validate 0.2.15 against git://github.com/angular-ui/ui-router.git#~0.2.10
bower angular-bootstrap#~0.11.0          cached git://github.com/angular-ui/bootstrap-bower.git#0.11.2
bower angular-bootstrap#~0.11.0        validate 0.11.2 against git://github.com/angular-ui/bootstrap-bower.git#~0.11.0
bower textAngular#~1.4.1                 cached git://github.com/fraywing/textAngular.git#1.4.3
bower textAngular#~1.4.1               validate 1.4.3 against git://github.com/fraywing/textAngular.git#~1.4.1
bower angular-file-upload#~1.2.0         cached git://github.com/nervgh/angular-file-upload.git#1.2.0
bower angular-file-upload#~1.2.0       validate 1.2.0 against git://github.com/nervgh/angular-file-upload.git#~1.2.0
bower angular-mocks#>=1.2.*              cached git://github.com/angular/bower-angular-mocks.git#1.4.3
bower angular-mocks#>=1.2.*            validate 1.4.3 against git://github.com/angular/bower-angular-mocks.git#>=1.2.*
bower angular-google-places-autocomplete#~0.2.7           cached git://github.com/kuhnza/angular-google-places-autocomplete.git#0.2.7
bower angular-google-places-autocomplete#~0.2.7         validate 0.2.7 against git://github.com/kuhnza/angular-google-places-autocomplete.git#~0.2.7
bower angular-scenario#>=1.2.*                            cached git://github.com/angular/bower-angular-scenario.git#1.4.3
bower angular-scenario#>=1.2.*                          validate 1.4.3 against git://github.com/angular/bower-angular-scenario.git#>=1.2.*
bower json3#~3.3.1                                        cached git://github.com/bestiejs/json3.git#3.3.2
bower json3#~3.3.1                                      validate 3.3.2 against git://github.com/bestiejs/json3.git#~3.3.1
bower font-awesome#>=4.1.0                                cached git://github.com/FortAwesome/Font-Awesome.git#4.4.0
bower font-awesome#>=4.1.0                              validate 4.4.0 against git://github.com/FortAwesome/Font-Awesome.git#>=4.1.0
bower angular-google-maps#~2.1.5                          cached git://github.com/angular-ui/angular-google-maps.git#2.1.5
bower angular-google-maps#~2.1.5                        validate 2.1.5 against git://github.com/angular-ui/angular-google-maps.git#~2.1.5
bower angular#1.4.3                                       cached git://github.com/angular/bower-angular.git#1.4.3
bower angular#1.4.3                                     validate 1.4.3 against git://github.com/angular/bower-angular.git#1.4.3
bower font-awesome#>=4.0.x                                cached git://github.com/FortAwesome/Font-Awesome.git#4.4.0
bower font-awesome#>=4.0.x                              validate 4.4.0 against git://github.com/FortAwesome/Font-Awesome.git#>=4.0.x
bower rangy#~1.3.0                                        cached git://github.com/timdown/rangy-release.git#1.3.0
bower rangy#~1.3.0                                      validate 1.3.0 against git://github.com/timdown/rangy-release.git#~1.3.0
bower angular#~1.2.11                                     cached git://github.com/angular/bower-angular.git#1.2.28
bower angular#~1.2.11                                   validate 1.2.28 against git://github.com/angular/bower-angular.git#~1.2.11
bower angular                                         resolution Unsuitable resolution declared for angular: 1.4.1

Unable to find a suitable version for angular, please choose one:
    1) angular#~1.2.11 which resolved to 1.2.28 and is required by angular-file-upload#1.2.0
    2) angular#>=1 which resolved to 1.2.28 and is required by angular-bootstrap#0.11.2
    3) angular#>= 1.0.8 which resolved to 1.2.28 and is required by angular-ui-router#0.2.15
    4) angular#^1.2.6 which resolved to 1.2.28 and is required by angular-socket-io#0.6.1
    5) angular#^1.2.x which resolved to 1.2.28 and is required by angular-google-places-autocomplete#0.2.7
    6) angular#1.2 - 1.4 which resolved to 1.2.28 and is required by angular-google-maps#2.1.5
    7) angular#1.4.3 which resolved to 1.4.3 and is required by angular-cookies#1.4.3, angular-mocks#1.4.3, angular-resource#1.4.3, angular-sanitize#1.4.3, angular-scenario#1.4.3
    8) angular#>=1.3.x which resolved to 1.4.3 and is required by textAngular#1.4.3

Prefix the choice with ! to persist it to bower.json

? Answer: 7!

bower m'a demandé de choisir entre les versions pour angular et j'ai choisi la 7ème option, car elle est angulaire 1.4.3, la dernière des versions requises dans la plupart des composants de mon application. Après cela, bower a effectué l’installation et a lié angular 1.4.3 à tous les composants de bower qui en ont besoin:

bower angular                                         resolution Saved angular#1.4.3 as resolution
bower es5-shim#~3.0.1                                    install es5-shim#3.0.2
bower angular-sanitize#>=1.2.*                           install angular-sanitize#1.4.3
bower bootstrap-sass-official#~3.1.1                     install bootstrap-sass-official#3.1.1+2
bower jquery#~1.11.0                                     install jquery#1.11.3
bower angular-resource#>=1.2.*                           install angular-resource#1.4.3
bower angular-cookies#>=1.2.*                            install angular-cookies#1.4.3
bower angular-bootstrap#~0.11.0                          install angular-bootstrap#0.11.2
bower angular-ui-router#~0.2.10                          install angular-ui-router#0.2.15
bower lodash#~3.9.3                                      install lodash#3.9.3
bower angular-socket-io#~0.6.0                           install angular-socket-io#0.6.1
bower bootstrap#~3.1.1                                   install bootstrap#3.1.1
bower angular-google-places-autocomplete#~0.2.7          install angular-google-places-autocomplete#0.2.7
bower textAngular#~1.4.1                                 install textAngular#1.4.3
bower angular-file-upload#~1.2.0                         install angular-file-upload#1.2.0
bower json3#~3.3.1                                       install json3#3.3.2
bower angular-mocks#>=1.2.*                              install angular-mocks#1.4.3
bower rangy#~1.3.0                                       install rangy#1.3.0
bower angular-google-maps#~2.1.5                         install angular-google-maps#2.1.5
bower font-awesome#>=4.0.x                               install font-awesome#4.4.0
bower angular#1.4.3                                      install angular#1.4.3
bower angular-scenario#>=1.2.*                           install angular-scenario#1.4.3

es5-shim#3.0.2 client/bower_components/es5-shim

angular-sanitize#1.4.3 client/bower_components/angular-sanitize
└── angular#1.4.3

bootstrap-sass-official#3.1.1+2 client/bower_components/bootstrap-sass-official

jquery#1.11.3 client/bower_components/jquery

angular-resource#1.4.3 client/bower_components/angular-resource
└── angular#1.4.3

angular-cookies#1.4.3 client/bower_components/angular-cookies
└── angular#1.4.3

angular-bootstrap#0.11.2 client/bower_components/angular-bootstrap
└── angular#1.4.3

angular-ui-router#0.2.15 client/bower_components/angular-ui-router
└── angular#1.4.3

lodash#3.9.3 client/bower_components/lodash

angular-socket-io#0.6.1 client/bower_components/angular-socket-io
└── angular#1.4.3

bootstrap#3.1.1 client/bower_components/bootstrap
└── jquery#1.11.3

angular-google-places-autocomplete#0.2.7 client/bower_components/angular-google-places-autocomplete
└── angular#1.4.3

textAngular#1.4.3 client/bower_components/textAngular
├── angular#1.4.3
├── font-awesome#4.4.0
└── rangy#1.3.0

angular-file-upload#1.2.0 client/bower_components/angular-file-upload
└── angular#1.4.3

json3#3.3.2 client/bower_components/json3

angular-mocks#1.4.3 client/bower_components/angular-mocks
└── angular#1.4.3

rangy#1.3.0 client/bower_components/rangy

angular-google-maps#2.1.5 client/bower_components/angular-google-maps
├── angular#1.4.3
└── lodash#3.9.3

font-awesome#4.4.0 client/bower_components/font-awesome

angular#1.4.3 client/bower_components/angular

angular-scenario#1.4.3 client/bower_components/angular-scenario
└── angular#1.4.3

Et maintenant, je lance à nouveau un bower list, pour vérifier comment étaient les dépendances:

-bash-4.1$ bower list
bower check-new     Checking for new versions of the project dependencies..
appName#0.0.0 /home/git/appName/test.git
├─┬ angular-bootstrap#0.11.2 (latest is 0.13.2)
│ └── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
├─┬ angular-cookies#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── angular#1.4.3 (latest is 1.4.4-build.4150+sha.39ff333)
├─┬ angular-file-upload#1.2.0
│ └── angular#1.4.3 incompatible with ~1.2.11 (1.2.29-build.592+sha.b041b66 available, latest is 1.4.4-build.4150+sha.39ff333)
├─┬ angular-google-maps#2.1.5
│ ├── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── lodash#3.9.3 (3.10.1 available)
├─┬ angular-google-places-autocomplete#0.2.7
│ └── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
├─┬ angular-mocks#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── angular#1.4.3
├─┬ angular-resource#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── angular#1.4.3
├─┬ angular-sanitize#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── angular#1.4.3
├─┬ angular-scenario#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
│ └── angular#1.4.3
├─┬ angular-socket-io#0.6.1 (latest is 0.7.0)
│ └── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
├─┬ angular-ui-router#0.2.15
│ └── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
├─┬ bootstrap#3.1.1 (latest is 3.3.5)
│ └── jquery#1.11.3 (3.0.0-alpha1+compat available)
├── bootstrap-sass-official#3.1.1+2 (latest is 3.3.5)
├── es5-shim#3.0.2 (latest is 4.1.10)
├── font-awesome#4.4.0
├── jquery#1.11.3 (latest is 3.0.0-alpha1+compat)
├── json3#3.3.2
├── lodash#3.9.3 (latest is 3.10.1)
└─┬ textAngular#1.4.3
  ├── angular#1.4.3 (1.4.4-build.4150+sha.39ff333 available)
  ├── font-awesome#4.4.0
  └── rangy#1.3.0

Comme vous le verrez, je vois encore une dépendance incompatible dans le composant de téléchargement de fichier angulaire. Ensuite, je cours dans le répertoire de composant et installe LOCALEMENT POUR CETTE COMPOSANTE une nouvelle version de angular (celle requise pour le composant lui-même):

-bash-4.1$ cd client/
-bash-4.1$ cd bower_components/
-bash-4.1$ cd angular-file-upload/
-bash-4.1$ bower install angular --save
bower angular#*                 cached git://github.com/angular/bower-angular.git#1.4.3
bower angular#*               validate 1.4.3 against git://github.com/angular/bower-angular.git#*

Unable to find a suitable version for angular, please choose one:
    1) angular#~1.2.11 which resolved to 1.2.28 and is required by angular-file-upload
    2) angular#~1.4.3 which resolved to 1.4.3

Prefix the choice with ! to persist it to bower.json

? Answer: 1!
bower angular               resolution Saved angular#~1.2.11 as resolution

Après cela, tout s'est bien passé et il n'y a plus eu de problèmes d'injection ou de dépendance. J'espère que cela peut vous aider.

Le point clé est la version angular.js et la version angular-cookies doit être identique.  enter image description here

après que je les ai égalés, cela a fonctionné pour moi.

0
hasanaydogar

L'OP a créé l'intercepteur à l'aide de l'usine. Cependant, je corrigeais un code et j'ai vu l'intercepteur créé en tant que fournisseur ....

.provider('myHttpInterceptor', function 
    HttpInterceptorProvider($injector, _, apiConfig) {
                var self = this;
...

Au cas où vous auriez une telle situation et que vous tombiez sur cette question SO, voici comment j'ai résolu mon problème.

J'ai essayé de brancher le $ cookieStore dans la fonction et j'ai même essayé d'utiliser le $ inject mais j'ai continué à avoir le fournisseur inconnu CookieStore (d'où ma découverte de ce post)

La façon dont j'ai résolu mon problème était de trouver la méthode $ get et de la placer dans le magasin de cookies.

this.$get = function($q, $cookieStore, myCache) {
                return {
                    'request': function(config) {
...

rétrospectivement, cela est tout à fait conforme à la documentation de la recette du fournisseur .

0
ThinkBonobo