本文介绍了未知提供者 CookieStore的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am having service where I want to use the $cookieStore module. It works fine, but when unit testing it breaks, and gives the error: "$cookieStoreProvider <- $cookieStore <- filtersService".

服务如下所示:

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

单元测试服务如下所示:

And the unit test service looks like this:

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 测试文件中包含了 angular-cookie.

I have included angular-cookies in the karma test file.

知道为什么代码在运行时可以工作,但单元测试失败了吗?

Any idea why the code works when running, but unittests fails?

更新:

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;

推荐答案

从上面的评论来看,对 'ngCookies' 的依赖似乎是在一个单独的模块中声明的.

From the comments above, it seems the dependency on 'ngCookies' is declared in a seperate module.

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

To fix this try declaring it in your service module:

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

这是修复此问题的推荐方法.

This is the recommended way of fixing this.

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

If, for some reason, you could not change the serviceModule definition, you could also declare it again in your unit tests:

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

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

However i would recommend you change it in your code base so your serviceModule does not depend on your main App module for it to function properly.

这篇关于未知提供者 CookieStore的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 06:43