2014-09-26 141 views
2

我在Yeoman Angular环境中,使用Jasmine进行测试。我在index.html文件包括茉莉花和茉莉花的Jquery如下:茉莉花未定义错误,当使用茉莉花jQuery

<script src="bower_components/jasmine/lib/jasmine-core/jasmine.js"></script> 
<script src="bower_components/jasmine-jquery/lib/jasmine-jquery.js"></script> 

当我打开我的应用程序,我在浏览器中得到这样的:

TypeError: jasmine is undefined 

jasmine.spiedEventsKey = function (selector, eventName) { 

(jasmine-jquery.js (line 32, col 2)) 

我已经包括茉莉花jQuery的茉莉花后的建议在我阅读的其中一个解决方案中,但它不起作用。我如何摆脱错误?

更新:我咕噜文件:

// Generated on 2014-09-19 using generator-angular 0.9.8 
'use strict'; 

// # Globbing 
// for performance reasons we're only matching one level down: 
// 'test/spec/{,*/}*.js' 
// use this if you want to recursively match all subfolders: 
// 'test/spec/**/*.js' 

module.exports = function (grunt) { 

// Load grunt tasks automatically 
require('load-grunt-tasks')(grunt); 

// Time how long tasks take. Can help when optimizing build times 
require('time-grunt')(grunt); 

// Configurable paths for the application 
var appConfig = { 
    app: require('./bower.json').appPath || 'app', 
    dist: 'dist' 
}; 

// Define the configuration for all the tasks 
grunt.initConfig({ 

// Project settings 
yeoman: appConfig, 

// Watches files for changes and runs tasks based on the changed files 
watch: { 
    bower: { 
    files: ['bower.json'], 
    tasks: ['wiredep'] 
    }, 
    js: { 
    files: ['<%= yeoman.app %>/scripts/{,*/}*.js'], 
    tasks: ['newer:jshint:all'], 
    options: { 
     livereload: '<%= connect.options.livereload %>' 
    } 
    }, 
    jsTest: { 
    files: ['test/spec/{,*/}*.js'], 
    tasks: ['newer:jshint:test', 'karma'] 
    }, 
    compass: { 
    files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], 
    tasks: ['compass:server', 'autoprefixer'] 
    }, 
    gruntfile: { 
    files: ['Gruntfile.js'] 
    }, 
    livereload: { 
    options: { 
     livereload: '<%= connect.options.livereload %>' 
    }, 
    files: [ 
     '<%= yeoman.app %>/{,*/}*.html', 
     '.tmp/styles/{,*/}*.css', 
     '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' 
    ] 
    } 
}, 

// The actual grunt server settings 
connect: { 
    options: { 
    port: 9000, 
    // Change this to '0.0.0.0' to access the server from outside. 
    hostname: 'localhost', 
    livereload: 35729 
    }, 
    livereload: { 
    options: { 
     open: true, 
     middleware: function (connect) { 
     return [ 
      connect.static('.tmp'), 
      connect().use(
      '/bower_components', 
      connect.static('./bower_components') 
     ), 
      connect.static(appConfig.app) 
     ]; 
     } 
    } 
    }, 
    test: { 
    options: { 
     port: 9001, 
     middleware: function (connect) { 
     return [ 
      connect.static('.tmp'), 
      connect.static('test'), 
      connect().use(
      '/bower_components', 
      connect.static('./bower_components') 
     ), 
      connect.static(appConfig.app) 
     ]; 
     } 
    } 
    }, 
    dist: { 
    options: { 
     open: true, 
     base: '<%= yeoman.dist %>' 
    } 
    } 
}, 

// Make sure code styles are up to par and there are no obvious mistakes 
jshint: { 
    options: { 
    jshintrc: '.jshintrc', 
    reporter: require('jshint-stylish') 
    }, 
    all: { 
    src: [ 
     'Gruntfile.js', 
     '<%= yeoman.app %>/scripts/{,*/}*.js' 
    ] 
    }, 
    test: { 
    options: { 
     jshintrc: 'test/.jshintrc' 
    }, 
    src: ['test/spec/{,*/}*.js'] 
    } 
}, 

// Empties folders to start fresh 
clean: { 
    dist: { 
    files: [{ 
     dot: true, 
     src: [ 
     '.tmp', 
     '<%= yeoman.dist %>/{,*/}*', 
     '!<%= yeoman.dist %>/.git*' 
     ] 
    }] 
    }, 
    server: '.tmp' 
}, 

// Add vendor prefixed styles 
autoprefixer: { 
    options: { 
    browsers: ['last 1 version'] 
    }, 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: '.tmp/styles/', 
     src: '{,*/}*.css', 
     dest: '.tmp/styles/' 
    }] 
    } 
}, 

// Automatically inject Bower components into the app 
wiredep: { 
    app: { 
    src: ['<%= yeoman.app %>/index.html'], 
    ignorePath: /\.\.\// 
    }, 
    sass: { 
    src: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], 
    ignorePath: /(\.\.\/){1,2}bower_components\// 
    } 
}, 

// Compiles Sass to CSS and generates necessary files if requested 
compass: { 
    options: { 
    sassDir: '<%= yeoman.app %>/styles', 
    cssDir: '.tmp/styles', 
    generatedImagesDir: '.tmp/images/generated', 
    imagesDir: '<%= yeoman.app %>/images', 
    javascriptsDir: '<%= yeoman.app %>/scripts', 
    fontsDir: '<%= yeoman.app %>/styles/fonts', 
    importPath: './bower_components', 
    httpImagesPath: '/images', 
    httpGeneratedImagesPath: '/images/generated', 
    httpFontsPath: '/styles/fonts', 
    relativeAssets: false, 
    assetCacheBuster: false, 
    raw: 'Sass::Script::Number.precision = 10\n' 
    }, 
    dist: { 
    options: { 
     generatedImagesDir: '<%= yeoman.dist %>/images/generated' 
    } 
    }, 
    server: { 
    options: { 
     debugInfo: true 
    } 
    } 
}, 

// Renames files for browser caching purposes 
filerev: { 
    dist: { 
    src: [ 
     '<%= yeoman.dist %>/scripts/{,*/}*.js', 
     '<%= yeoman.dist %>/styles/{,*/}*.css', 
     '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', 
     '<%= yeoman.dist %>/styles/fonts/*' 
    ] 
    } 
}, 

// Reads HTML for usemin blocks to enable smart builds that automatically 
// concat, minify and revision files. Creates configurations in memory so 
// additional tasks can operate on them 
useminPrepare: { 
    html: '<%= yeoman.app %>/index.html', 
    options: { 
    dest: '<%= yeoman.dist %>', 
    flow: { 
     html: { 
     steps: { 
      js: ['concat', 'uglifyjs'], 
      css: ['cssmin'] 
     }, 
     post: {} 
     } 
    } 
    } 
}, 

// Performs rewrites based on filerev and the useminPrepare configuration 
usemin: { 
    html: ['<%= yeoman.dist %>/{,*/}*.html'], 
    css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], 
    options: { 
    assetsDirs: ['<%= yeoman.dist %>','<%= yeoman.dist %>/images'] 
    } 
}, 

// The following *-min tasks will produce minified files in the dist folder 
// By default, your `index.html`'s <!-- Usemin block --> will take care of 
// minification. These next options are pre-configured if you do not wish 
// to use the Usemin blocks. 
// cssmin: { 
// dist: { 
//  files: { 
//  '<%= yeoman.dist %>/styles/main.css': [ 
//   '.tmp/styles/{,*/}*.css' 
//  ] 
//  } 
// } 
// }, 
// uglify: { 
// dist: { 
//  files: { 
//  '<%= yeoman.dist %>/scripts/scripts.js': [ 
//   '<%= yeoman.dist %>/scripts/scripts.js' 
//  ] 
//  } 
// } 
// }, 
// concat: { 
// dist: {} 
// }, 

imagemin: { 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: '<%= yeoman.app %>/images', 
     src: '{,*/}*.{png,jpg,jpeg,gif}', 
     dest: '<%= yeoman.dist %>/images' 
    }] 
    } 
}, 

svgmin: { 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: '<%= yeoman.app %>/images', 
     src: '{,*/}*.svg', 
     dest: '<%= yeoman.dist %>/images' 
    }] 
    } 
}, 

htmlmin: { 
    dist: { 
    options: { 
     collapseWhitespace: true, 
     conservativeCollapse: true, 
     collapseBooleanAttributes: true, 
     removeCommentsFromCDATA: true, 
     removeOptionalTags: true 
    }, 
    files: [{ 
     expand: true, 
     cwd: '<%= yeoman.dist %>', 
     src: ['*.html', 'views/{,*/}*.html'], 
     dest: '<%= yeoman.dist %>' 
    }] 
    } 
}, 

// ng-annotate tries to make the code safe for minification automatically 
// by using the Angular long form for dependency injection. 
ngAnnotate: { 
    dist: { 
    files: [{ 
     expand: true, 
     cwd: '.tmp/concat/scripts', 
     src: ['*.js', '!oldieshim.js'], 
     dest: '.tmp/concat/scripts' 
    }] 
    } 
}, 

// Replace Google CDN references 
cdnify: { 
    dist: { 
    html: ['<%= yeoman.dist %>/*.html'] 
    } 
}, 

// Copies remaining files to places other tasks can use 
copy: { 
    dist: { 
    files: [{ 
     expand: true, 
     dot: true, 
     cwd: '<%= yeoman.app %>', 
     dest: '<%= yeoman.dist %>', 
     src: [ 
     '*.{ico,png,txt}', 
     '.htaccess', 
     '*.html', 
     'views/{,*/}*.html', 
     'images/{,*/}*.{webp}', 
     'fonts/*' 
     ] 
    }, { 
     expand: true, 
     cwd: '.tmp/images', 
     dest: '<%= yeoman.dist %>/images', 
     src: ['generated/*'] 
    }, { 
     expand: true, 
     cwd: '.', 
     src: 'bower_components/bootstrap-sass-official/assets/fonts/bootstrap/*', 
     dest: '<%= yeoman.dist %>' 
    }] 
    }, 
    styles: { 
    expand: true, 
    cwd: '<%= yeoman.app %>/styles', 
    dest: '.tmp/styles/', 
    src: '{,*/}*.css' 
    } 
}, 

// Run some tasks in parallel to speed up the build process 
concurrent: { 
    server: [ 
    'compass:server' 
    ], 
    test: [ 
    'compass' 
    ], 
    dist: [ 
    'compass:dist', 
    'imagemin', 
    'svgmin' 
    ] 
}, 

// Test settings 
karma: { 
    unit: { 
    configFile: 'test/karma.conf.js', 
    singleRun: true 
    } 
} 
}); 


grunt.registerTask('serve', 'Compile then start a connect web server', function (target) { 
if (target === 'dist') { 
    return grunt.task.run(['build', 'connect:dist:keepalive']); 
} 

grunt.task.run([ 
    'clean:server', 
    'wiredep', 
    'concurrent:server', 
    'autoprefixer', 
    'connect:livereload', 
    'watch' 
]); 
}); 

grunt.registerTask('server', 'DEPRECATED TASK. Use the "serve" task instead', function (target) { 
grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); 
grunt.task.run(['serve:' + target]); 
}); 

grunt.registerTask('test', [ 
    'clean:server', 
    'concurrent:test', 
    'autoprefixer', 
    'connect:test', 
    'karma' 
    ]); 

grunt.registerTask('build', [ 
    'clean:dist', 
    'wiredep', 
    'useminPrepare', 
'concurrent:dist', 
'autoprefixer', 
'concat', 
'ngAnnotate', 
'copy:dist', 
'cdnify', 
'cssmin', 
'uglify', 
'filerev', 
'usemin', 
'htmlmin' 
]); 

grunt.registerTask('default', [ 
    'newer:jshint', 
    'test', 
    'build' 
]); 
}; 

回答

0

为什么你在index.html文件中加载茉莉花呢?它基本上是一个运行测试的服务器(NodeJS)模块。它在客户端范围内没有意义。

+0

当我运行'grunt serve'时,它警告我'jasmine'和'jasmine-jquery'文件没有被注入。我在某处阅读,其中包括index.html中的这些文件可能会解决该警告。 – 2014-10-13 07:12:43

+0

你可以显示你的'gruntfile'吗? – yarons 2014-10-13 13:20:11

+0

是...更新我的问题... – 2014-10-13 13:23:45