RequireJS,Jasmine和Grunt错误:scripterror:非法路径或脚本错误

时间:2014-12-15 22:46:13

标签: javascript requirejs gruntjs jasmine

我有一个使用requireJS的应用程序,我想使用grunt-contrib-jasmie来测试它。为了让茉莉花能够使用,我正在使用cloudchen的grunt-template-jasmine-requirejs。该应用程序具有以下目录结构:

topLevelApplicationFolder    
|_app.html
|_Gruntfile.js
|_package.json
|_js
  |_app.js
  |_app
    |_modules
      |_rgbaHelpers.js
      |_main.js
   |_lib
     |_require.js
|_spec
  |_rgba_spec.js

app.js是我的requireJS配置文件:

requirejs.config({
    baseUrl: "js/lib",
    paths: {
      app: "../app"
    },
    shim: {
        spectrum: {
            deps: ["jquery"],
            exports: "spectrum"
        }
    }
});

// Load the main app module to start the app
requirejs(["app/main"]);

我的Gruntfile.js如下:

module.exports = function(grunt) {

// Project configuration.
grunt.initConfig({
    jasmine : {
        taskName: {
            src : 'js/**/*.js',
            options : {
                specs : 'spec/**/*.js',
                template: require('grunt-template-jasmine-requirejs'),
                templateOptions: {
                    requireConfig: {
                        baseUrl: 'js/lib'
                    }
                // requireConfigFile: './js/app.js'
                }
            }
        }
    },
    jshint: {
        all: [
            'Gruntfile.js',
            'js/**/*.js',
            'spec/**/*.js'
        ],
        options: {
            jshintrc: '.jshintrc'
        }
    }
});

grunt.loadNpmTasks('grunt-contrib-jasmine');
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.registerTask('test', ['jshint', 'jasmine']);
grunt.registerTask('default', ['test']);

};

rgba_spec.js是我想要运行的测试。这很简单:

define(['js/app/modules/rgbaHelpers'], function (rgbaHelpers) {
    describe('A suite', function() {
        it('should pass this test', function() {
            expect(rgbaHelpers).not.toBe(null);
        });
    });
});

但是当我运行grunt jasmine时,我收到以下错误:

Error: scripterror: Illegal path or script error: ['js/app/modules/rgbaHelpers']

我一整天都在摸不着头脑。有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:0)

所以我能够通过从模板选项中完全删除requireConfig和baseURL来解决这个问题:

    jasmine : {
        taskName: {
            src : 'js/**/*.js',
            options : {
                specs : 'spec/**/*.js',
                template: require('grunt-template-jasmine-requirejs'),
                templateOptions: {
                }
            }
        }
    }

然后在每个规范的顶部我会做这样的事情:

define(['js/app/modules/mouseHelpers'], function (mouseHelpers) {