未知的提供商CookieStore

Dof*_*ofs 9 jasmine angularjs angularjs-service karma-runner

我正在使用$ cookieStore模块的服务.它工作正常,但是当单元测试时它会中断,并给出错误:"$ cookieStoreProvider < - $ cookieStore < - filtersService".

该服务看起来像这样:

serviceModule.factory('filtersService', ['$rootScope', '$location', '$cookieStore', function($rootScope, $location, $cookieStore){
    return {
        getFilters: function(){...}
}
Run Code Online (Sandbox Code Playgroud)

单元测试服务看起来像这样:

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...)
}));
});
Run Code Online (Sandbox Code Playgroud)

我在karma测试文件中包含了angular-cookies.

知道为什么代码在运行时有效,但是单元测试失败了吗?

更新:

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;
Run Code Online (Sandbox Code Playgroud)

Cla*_*Pan 30

从上面的注释中可以看出,对'ngCookies'的依赖是在一个单独的模块中声明的.

要解决此问题,请尝试在服务模块中声明:

var serviceModule = angular.app('App.services', ['ngCookies']);
Run Code Online (Sandbox Code Playgroud)

这是解决此问题的推荐方法.

如果由于某种原因,您无法更改serviceModule定义,则还可以在单​​元测试中再次声明它:

beforeEach(module('ngCookies','App.services'));
Run Code Online (Sandbox Code Playgroud)

但是,我建议您在代码库中更改它,以便您的serviceModule不依赖于您的主App模块,以使其正常运行.

  • 我想补充说,此解决方案还需要包含angular-cookies.js才能工作. (2认同)