首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS单元测试Karma -未知提供商

AngularJS单元测试Karma -未知提供商
EN

Stack Overflow用户
提问于 2019-04-23 08:48:10
回答 1查看 62关注 0票数 1

我正在尝试在我们的遗留AngularJS应用程序上设置单元测试。我使用标准的karma和angular-mock来设置测试用例。但是当我试图注入一些服务和工厂时,我遇到了Unknown provider的问题。我的karma.conf看起来像这样(为了简洁,我去掉了很多东西)

代码语言:javascript
复制
module.exports = function(config) {   config.set({

     basePath: '',

     // frameworks to use
     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
     frameworks: ['jasmine'],

     // list of files / patterns to load in the browser
     files: [
       './node_modules/angular/angular.js',
       "http://cf._____.com/content/myfootprints/js/priorityqueue.js",
       "http://cf._____.com/content/myfootprints/js/ng-flow-standalone.js",
       INCLUDED ALL THE DEPENDENCIES HERE 
       './node_modules/angular-mocks/angular-mocks.js',
       './static/js/app/main.js',
       './static/tests/**/*.js'
     ]
     preprocessors: {
       './static/js/app/**/main.js':['webpack', 'sourcemap'],
       './static/js/app/**/*.js':['webpack', 'sourcemap'],
     },

在我们的应用程序中,我们有一个使用importsrequireDir将所有控制器和工厂导入到应用程序中的main.js。它看起来像这样

代码语言:javascript
复制
const requireDir = require('webpack-requiredir');

    import './isocurrency.js';
    import './myfp_uirouter.js';
    import './infobubble.js';
    // other imports
    requireDir(require.context('./controllers', true, /.*\.js$/))
    requireDir(require.context('./directives', true, /.*\.js$/))
    requireDir(require.context('./factories', true, /.*\.js$/))
    requireDir(require.context('./filters', true, /.*\.js$/))

我有一个包含单元测试的文件,如下所示

代码语言:javascript
复制
describe('Unit test file, function(){
  var generalUtilFactory;
  beforeEach(inject(function($injector){
    generalUtilFactory = $injector.get('generalUtilsFactory'); <--- getting unknown provider 
    // Also tried to inject it in 
    //via function($rootScope,... _generalUtilFactory_)
  }));

Other code
  .
  .
  .
  .

});

现在我确实有了通用的util工厂,它正在通过main.js导入,并在应用程序模块中注册。我在调试器中查看了它。它看起来像这样

代码语言:javascript
复制
angular.module('app').factory('generalUtilsFactory', ['$timeout', '$filter', 'FileSaver', 'Blob', function($timeout, $filter, FileSaver, Blob) {
    var generalUtilsFactory = {};

    generalUtilsFactory.getKeys = function(o){

我不太确定这里发生了什么。所有需要的文件都已包含在内,并且所有的es6都已正确转换。在这方面提供一些帮助将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-04-23 11:36:46

我认为您需要在注入服务之前注入主模块。也许这样做会有所帮助:

代码语言:javascript
复制
describe('Service Tests', function () {
    beforeEach(module('app'));
    var _generalUtilsFactory;

    beforeEach(inject(function (generalUtilsFactory) {
        _generalUtilsFactory = generalUtilsFactory
    }));
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55802830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档