2013-09-22 8 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...) 
})); 
}); 

実行時にコードが機能するが、unittestsが失敗する理由は何ですか?

更新:

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

あなたはカルマの設定ファイルを表示することができますか? – Blackhole

+0

@Blackholeもちろん、今追加されています。 – Dofs

+0

あなたは 'files'を配列にcookies.jsファイルを含める必要はありませんか?あなたは、index.htmlの中で行うと同じように: '<スクリプトSRC = "http://code.angularjs.org/1.0.0rc10/angular-cookies-1.0.0rc10.js">' –

答えて

29

上記のコメントから、ngCookies "への依存は別々のモジュールで宣言されているようです。

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

これは、これを固定する推奨される方法です:これはあなたのサービスモジュールでそれを宣言しようと固定するために

何らかの理由で、あなたはserviceModuleの定義を変更することができませんでした、場合、また、あなたのユニットテストで再びそれを宣言することができます:私はあなたがそうあなたのコードベースあなたのserviceModuleでそれを変更推薦しかし

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

それが正しく機能するためにあなたのメインのAppモジュールに依存しません。

+2

このソリューションを動作させるには、angular-cookies.jsも必要です。 –

0

OPは、あなたがこのような状況を持っており、上につまずいた....場合

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

をしかし、私はいくつかのコードを固定した。..工場を使用してインターセプタを作成し、プロバイダーとして作成したインターセプタを見てきましたこれは今ここで私の問題を解決した方法です。

私は私の問題を解決し

方法を見つけることでした(私はこの記事を見つけたので、どのように)関数に$は、cookiestoreを接続しようとしたとしても$の注入を使用してみましたが、私は不明なプロバイダは、cookiestoreを取得保管$メソッドを取得し、そこに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

私はそれらをマッチした後に、それは私のために働いています。

関連する問題