Karma + angular-mocks TypeError:' undefined'不是一个对象(评估' angular.mock = {}')

时间:2015-01-07 16:16:30

标签: javascript angularjs unit-testing jasmine karma-runner

我正在尝试使用Karma + Jasmine编写单元测试,但遇到角度模拟错误。运行grunt测试时出现以下错误:

  

PhantomJS 1.9.8(Mac OS X)错误    TypeError:'undefined'不是对象(评估'angular.mock = {}')    at /Users/danielbogart/Documents/coding/work/AexNav/bower_components/angular-mocks/angular->mocks.js:17   Chrome 39.0.2171(Mac OS X 10.9.4)错误    未捕获的TypeError:无法设置undefined的属性'mock'    at /Users/danielbogart/Documents/coding/work/AexNav/bower_components/angular-mocks/angular->mocks.js:17

Gruntfile karma config:

    karma: {
        options: {
            frameworks: ['jasmine'],
            files: [ 
                'dom_munger.data.appjs',
                'tests/spec/*.js',
                'bower_components/angular-mocks/angular-mocks.js'
            ],
            logLevel: 'ERROR',
            reporters: ['mocha'],
            autoWatch: false, //watching is handled by grunt-contrib-watch
            singleRun: true
        },
        all_tests: {
            browsers: ['PhantomJS', 'Chrome']
        },
        during_watch: {
            browsers: ['PhantomJS']
        }
    }

谢谢!

4 个答案:

答案 0 :(得分:20)

你也需要包含angular.js,然后只有angular.mocks会工作,否则window.angular将是未定义的。

 files: [ 
            'dom_munger.data.appjs',
            'path/to/angular.js', //<-- include angularjs
            'bower_components/angular-mocks/angular-mocks.js',
            'tests/spec/*.js'
        ],

答案 1 :(得分:4)

2017年更新和webpack 2 (但角度相同&lt; 2)

  1. 就像@jlew所说的那样,棱角分明的嘲笑希望在窗户上有角度

  2. 模块引用正由webpack替换

  3. 因此,在测试中,您需要一个标题,如:

    import angular from 'angular';
    import 'angular-mocks/ngMock';
    

    并使用module

    替换每个全局angular.mock.module引用

答案 2 :(得分:2)

angular-mocks.js假设还包含了angular.js.

答案 3 :(得分:0)

我在以下语句中遇到此错误:

angular.mock.module( 'ui.router' )

这是由于库声明中的顺序错误引起的:

karma.config.js:

...
files: ['./node_modules/angular-mocks/angular-mocks.js']
   .concat(dependencies),
...

({dependencies是我的图书馆名单,其中包含angular.js

我只是将'./node_modules/angular-mocks/angular-mocks.js'移到依赖项列表中,但是之后 angular.js

喜欢这个:

...
'./node_modules/angular/angular.js',
'./node_modules/angular-mocks/angular-mocks.js'
...

进一步:

如果您查看angular-mocks.js,就会发现它需要angular.js才能正常工作!

/**
 * @license AngularJS v1.7.5
 * (c) 2010-2018 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {

'use strict';

/* global routeToRegExp: true */
...