2013-09-22 53 views
9

我有服務,我想使用$ cookieStore模塊。它工作正常,但是當單元測試中斷時,並給出錯誤:「$ cookieStoreProvider < - $ cookieStore < - filtersService」。未知供應商CookieStore

服務看起來是這樣的:

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

我已經包含在業力測試文件角餅乾。

任何想法爲什麼代碼在運行時工作,但單元測試失敗?

更新:

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

你可以顯示karma配置文件嗎? – Blackhole

+0

@Blackhole當然,它現在被添加。 – Dofs

+0

你不需要在'files'數組中包含cookies.js文件嗎?就像你在index.html中一樣:'' –

回答

29

從上面的意見,似乎對 'ngCookies' 依賴一個單獨的模塊中聲明。

要解決這個問題試試你的服務模塊中聲明它:

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

這是解決這個的推薦方式。

如果由於某種原因,你不能改變serviceModule定義,你也可以再次在單元測試中它聲明:

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

不過我建議你改變它在你的代碼基礎,以便您serviceModule不依賴於你的主應用程序模塊,因爲它可以正常工作。

+2

我會補充說,包括角-cookies.js也需要此解決方案的工作。 –

0

的OP使用工廠創建的攔截器。但是,我正在修理一些代碼,已經被視爲提供商創建的攔截器....

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

如果你有這樣的情況,偶然發現這個問題,這是我如何解決我的問題。

我試圖在函數中的$的CookieStore堵塞,甚至用$注射嘗試,但我一直得到未知提供商的CookieStore(我因此如何發現這個職位)

我解決我的問題的辦法是找到$ get方法並將其放入cookie存儲。

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

回想起來,這與provider recipe documentation相當吻合。

3

我在使用角度曲奇和角度文件上傳時遇到了類似的問題。我解決了它這種方式:

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

要點是angular.js版本和角餅乾版本必須相同。 enter image description here

我匹配後它已爲我工作。