AngularJS单元测试' ReferenceError:人性化未定义'

时间:2014-03-25 20:10:42

标签: angularjs unit-testing karma-jasmine

我正在尝试将humane.js notification library合并到我的AngularJS应用中。我已将humane.js使用包装到Angular服务中,并且应用程序正常运行。但是当我尝试为Angular服务编写单元测试时,在尝试执行此服务的第一次测试时出现以下错误:

ReferenceError: humane is not defined

我的karma.conf文件包含对humane.js文件的引用:

files: [
  'bower_components/angular/angular.js',
  'bower_components/angular-route/angular-route.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/messageformat/messageformat.js',
  'bower_components/angular-translate/angular-translate.js',
  'bower_components/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js',
  'bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js',
  'bower_components/momentjs/moment.js',
  'other_components/highcharts-ng/src/directives/highcharts-ng.js',
  'other_components/keylines/keylines.js',
  'other_components/logging/log4javascript.js',
  'bower_components/angular-bootstrap/ui-bootstrap-tpls.js',
  'bower_components/humane-js/humane.js',
  'scripts/*.js',
  'scripts/*/*.js',
  'resources/defaultTranslations.js',
  'test/unit/*/*.js',
  'views/*.html'
],

我无法弄清楚出了什么问题。如果我用一个类似的通知库替换Humane.js - alertify.js - 并做同样的事情,我不会得到错误。

我错过了什么?就像我说的,应用程序有效,包括通知部分。只有单元测试会受到影响。 Humane.js模块使用了一些不寻常的(对我来说)自执行模块语法:

;!function (name, context, definition) {
  if (typeof module !== 'undefined') module.exports = definition(name, context)
  else if (typeof define === 'function' && typeof define.amd  === 'object') define(definition)
  else context[name] = definition(name, context)
}('humane', this, function (name, context) {

...这里的模块定义......

   return new Humane()
})

我想知道这是否会以某种方式混淆业力加载器。另一个库(alertify.js)没有这种结构。

1 个答案:

答案 0 :(得分:0)

在尝试找出不同的Karma错误时到了这里。它可能没有关系,但我看到你的业力文件路径看起来与我不同。我通常使用通过角度生成器生成的默认值,它在我的业力中产生类似的东西:

        files     : [
            'app/bower_components/angular/angular.js',
            'app/bower_components/angular-mocks/angular-mocks.js',
            'app/bower_components/angular-resource/angular-resource.js',
            'app/bower_components/angular-cookies/angular-cookies.js',
            'app/bower_components/angular-sanitize/angular-sanitize.js',
            'app/bower_components/angular-route/angular-route.js'
            ...
        ],