2013-09-22 14 views
9

Mam usługę, w której chcę korzystać z modułu $ cookieStore. Działa to dobrze, ale gdy jednostka testuje to zrywa i podaje błąd: "$ cookieStoreProvider < - $ cookieStore < - filtersService".Nieznany dostawca CookieStore

Usługa wygląda następująco:

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

I obsługa testów jednostkowych wygląda następująco:

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

mam włączone skośnych cookies w pliku testowego karma.

Każdy pomysł, dlaczego kod działa po uruchomieniu, ale niepowodzenie usterki?

Aktualizacja:

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; 
+0

Czy możesz pokazać plik konfiguracyjny karmy? – Blackhole

+0

@Backhole Oczywiście, jest teraz dodany. – Dofs

+0

czy nie musisz dołączać pliku cookie.js do tablicy 'files'? tak jak w index.html: '' –

Odpowiedz

29

Z powyższych uwag, wydaje się, że zależność 'ngCookies' jest zadeklarowana w osobnym module.

Aby rozwiązać ten problem spróbuj deklarowania go w module serwisowym:

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

Jest to zalecany sposób ustalania tego.

Jeśli z jakiegoś powodu nie może zmienić definicję serviceModule, można również zadeklarować je ponownie w swoich testach jednostkowych:

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

Jednak polecam go zmienić w swojej bazie kodu więc serviceModule nie zależy od głównego modułu aplikacji, aby mógł prawidłowo działać.

+2

Dodam, że w przypadku tego rozwiązania wymagane jest również plik cookie angular-cookie.js. –

0

OP stworzył przechwytywania za pomocą fabryki .. Jednak ja ustalania kodu i widzieli przechwytywania utworzony jako dostawcy ....

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

w przypadku masz takiej sytuacji i natknął się na to pytanie SO, to tutaj jest sposób, w jaki rozwiązałem mój problem.

Próbowałem podłączając $ CookieStore w funkcji i nawet próbował za pomocą $ inject ale trzymałem się nieznane dostawca CookieStore (stąd jak znalazłem ten post)

Sposób, w jaki rozwiązał mój problem było znalezienie $ get method i wrzuć tam plik cookie.

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

Z perspektywy czasu jest to całkiem zgodne z provider recipe documentation.

3

Miałem podobny problem, gdy używano kątowych plików cookie i przesyłano pliki kątowe.Rozwiązałem to w ten sposób:

First, I´ve checked all the dependencies on my app with 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) 

As you will see, bower tells me about the incompatibility between angular 1.2.28 and 1.4.3, then, we have a library problem. The same for angular-cookies and angular-file-upload.

After that, I just decided to clean all my bower_components dir with rm -fr bower_components and run a new bower install to ensure all the libraries are "fresh-installed".

-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 asked me to choose between the versions for angular and I´ve chosen the 7th option, as it´s angular 1.4.3, the latest of the versions required in most of the components of my app. After that, bower did the installation, and linked angular 1.4.3 to all the bower_components that require it:

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 

And now, I run a bower list again, to check how the dependencies were now:

-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 

As you will see, I still see an incompatible dependency in angular-file-upload component. Then, I run into the component dir, and installed LOCALLY FOR THIS COMPONENT a new version of angular (the required one for the component itself):

-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 

After that, everything went ok and there was not more injection or dependency problems. Hope it may help you.

0

Kluczowym punktem jest wersja angular.js i wersja z ciasteczkami kwadratowymi musi być taka sama. enter image description here

po ich dopasowaniu sprawdziło się u mnie.