4

我在 AngularJs yeoman脚手架内开始业力。错误“无法调用未定义的方法‘模块’”在 gruntfile.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 中。

4

2 回答 2

4

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

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符号从第一次加载时省略规范文件(当然要更改以匹配您的命名约定)。

于 2014-03-05T16:18:43.027 回答
1

此行app/bower_components/**/*.js无法正常工作,您不想使用它,因为.js同一文件夹中可能有多个文件(例如常规文件和缩小文件)并且您不想包含所有文件

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

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

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

于 2014-03-05T16:11:16.653 回答