AngularJS和Karma,无法调用未定义的方法'模块'

时间:2014-03-05 12:54:26

标签: angularjs gruntjs yeoman karma-runner karma-jasmine

我在AngularJs yeoman 脚手架中开始业力。 错误“无法调用方法'模块'未定义”位于gomanntfile.js中,由yeoman生成,位于第一行module.exports = function (grunt) { ...

karma.conf.js是

module.exports = function(config) {
config.set({

// base path, that will be used to resolve files and exclude
basePath: '',

frameworks: ['jasmine'],


// list of files / patterns to load in the browser
files: [
    '**/*.js',
    'app/bower_components/**/*.js'
],

exclude: [ ],

reporters: ['progress'],

// web server port
port: 9876,

colors: true,

logLevel: config.LOG_INFO,

autoWatch: true,

browsers: ['Chrome'],

captureTimeout: 60000,

singleRun: false
});
};

angular.js包含在bower_components中。

2 个答案:

答案 0 :(得分:4)

问题是由files声明引起的。因为您加载**/*.js后续包含的bower组件是不必要的(它已经被第一次调用加载)。

Karma不会试图变得聪明,因此您需要先指定要加载的内容。例如,从我的karma.conf.js个文件之一:

files: [
    // Required libraries
    'assets/bower_components/jquery/dist/jquery.js',
    'assets/bower_components/angular/angular.js',
    'assets/bower_components/angular-resource/angular-resource.js',
    'assets/bower_components/ng-table/ng-table.js',

    // App under test
    'assets/javascripts/**/!(*.spec).js',

    // Mocks
    'test/js/lib/angular/angular-mocks.js',

    // Templates
    'assets/javascripts/angular/**/*.html',

    // Finally... tests
    'assets/javascripts/**/*.spec.js',
    'test/js/unit**/*.js'
],

在上面,我首先明确加载了所需的库。然后我在Angular模拟库之前加载所有非测试JS。然后我加载模板,最后引入测试。

您可以使用!(*.spec).js表示法从第一次加载中省略规范文件(更改以匹配您的命名约定)。

答案 1 :(得分:1)

此行app/bower_components/**/*.js无效,您不想使用它,因为同一文件夹中可能有多个.js个文件(例如常规和缩小)我想包括所有这些

只需手动将该行更改为所有角度文件,它应该可以正常工作

app/bower_components/angular/angular.js,
app/bower_components/angular-mocks/angular-mocks.js

并且不要忘记包含angular-mocks,可以在规范中访问全局变量的定义 - moduleinject ...