我正在尝试使用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']
}
}
谢谢!
答案 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)
就像@jlew所说的那样,棱角分明的嘲笑希望在窗户上有角度
模块引用正由webpack替换
因此,在测试中,您需要一个标题,如:
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 */
...