Неизвестный провайдер CookieStore

У меня есть служба, в которой я хочу использовать модуль $cookieStore. Он отлично работает, но при модульном тестировании ломается и выдает ошибку: "$cookieStoreProvider ‹- $cookieStore ‹- filterService".

Сервис выглядит так:

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

И служба модульного тестирования выглядит так:

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

Я включил угловые файлы cookie в тестовый файл кармы.

Есть идеи, почему код работает во время работы, но юнит-тесты терпят неудачу?

Обновление:

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;

person Dofs    schedule 22.09.2013    source источник
comment
Можете ли вы показать файл конфигурации кармы?   -  person Blackhole    schedule 22.09.2013
comment
@Blackhole Конечно, это добавлено сейчас.   -  person Dofs    schedule 22.09.2013
comment
вам не нужно включать файл cookie.js в массив files? так же, как в index.html: <script src="http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js"></script>   -  person Eduard Gamonal    schedule 22.09.2013
comment
@EduardGamonal Используя «app/assets/javascripts/angular-*.js», я также включаю angular-cookies.min.js.   -  person Dofs    schedule 22.09.2013
comment
а где вы используете cookieStore? возможно, его также следует ввести в блок beforeEach   -  person Eduard Gamonal    schedule 22.09.2013
comment
CookieStore используется в методе getFilters службы filterService. Я еще не издевался над ним в тесте.   -  person Dofs    schedule 22.09.2013
comment
Где вы объявили зависимость от ngCookies? Это в сервисном модуле или в родительском модуле? Для модульного тестирования вам необходимо определить «ngCookies» в самом сервисном модуле или загрузить его в модульном тесте явно.   -  person Clark Pan    schedule 23.09.2013
comment
@ClarkPan ngCookies объявлен в файле приложения. Как мне определить ngCookies в модульном тесте, поскольку это может быть проблемой?   -  person Dofs    schedule 23.09.2013


Ответы (4)


Из приведенных выше комментариев кажется, что зависимость от ngCookies объявлена ​​в отдельном модуле.

Чтобы исправить это, попробуйте объявить его в своем сервисном модуле:

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

Это рекомендуемый способ исправить это.

Если по какой-то причине вы не можете изменить определение serviceModule, вы также можете снова объявить его в своих модульных тестах:

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

Однако я бы порекомендовал вам изменить его в своей кодовой базе, чтобы ваш serviceModule не зависел от вашего основного модуля приложения, чтобы он работал правильно.

person Clark Pan    schedule 24.09.2013
comment
Я бы добавил, что для работы этого решения также требуется включение angular-cookies.js. - person Eran Boudjnah; 01.10.2014

У меня была аналогичная проблема при использовании угловых файлов cookie и загрузки угловых файлов. Я решил это так:

Во-первых, я проверил все зависимости своего приложения с помощью 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)

Как вы увидите, Bower сообщает мне о несовместимости между angular 1.2.28 и 1.4.3, значит, у нас проблема с библиотекой. То же самое для angular-cookies и angular-file-upload.

После этого я просто решил очистить весь каталог bower_components с помощью rm -fr bower_components и запустить новый bower install, чтобы убедиться, что все библиотеки «свеже установлены».

-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 попросил меня выбрать между версиями для angular, и я выбрал 7-й вариант, так как это angular 1.4.3, последняя из версий, необходимых для большинства компонентов моего приложения. После этого Bower выполнил установку и связал angular 1.4.3 со всеми компонентами Bower_components, которым это необходимо:

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

И теперь я снова запускаю 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-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

Как вы увидите, я все еще вижу несовместимую зависимость в компоненте angular-file-upload. Затем я запускаю каталог компонента и ЛОКАЛЬНО ДЛЯ ЭТОГО КОМПОНЕНТА устанавливаю новую версию angular (необходимую для самого компонента):

-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

После этого все пошло нормально, и больше не было проблем с инъекциями или зависимостями. Надеюсь, это поможет вам.

person Alejandro Teixeira Muñoz    schedule 07.08.2015

ОП создал перехватчик, используя фабрику. Однако я исправлял некоторый код и видел перехватчик, созданный как провайдер....

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

Если у вас возникла такая ситуация и вы наткнулись на этот вопрос SO, вот как я решил свою проблему.

Я попытался подключить $cookieStore к функции и даже попытался использовать $inject, но продолжал получать CookieStore неизвестного поставщика (отсюда и то, как я нашел этот пост)

Способ, которым я решил свою проблему, заключался в том, чтобы найти метод $get и добавить туда хранилище файлов cookie.

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

оглядываясь назад, это вполне согласуется с документацией рецептов поставщиков.

person ThinkBonobo    schedule 06.07.2015

Ключевым моментом является версия angular.js и версия angular-cookies, которые должны быть одинаковыми. введите здесь описание изображения

после того, как я сопоставил их, это сработало для меня.

person hasanaydogar    schedule 12.08.2015