Grunt jasmine测试在终端中失败但在浏览器中失败

时间:2013-10-31 16:01:26

标签: javascript jasmine gruntjs

我已经使用grunt和jasmine设置了一些测试,但是当我尝试在终端中运行测试时遇到了问题。我看到了这个错误:

>> Error caught from phantom. More info can be found by opening the Spec Runner in a browser.

当我在浏览器中运行spec runner文件时,我看到所有测试都通过,并且没有显示任何类型的错误。

有谁知道这个问题可能是什么原因?

这是我的Gruntfile:

module.exports = function(grunt) {

  grunt.initConfig({

pkg: grunt.file.readJSON('package.json'),

/**
 * Uglify task to minify all javscript files
 * seperating out all script files into a development directory
 * and then having all 'production' scripts within a product directory
 *
 * Note: Will need a bit of work to target the plugins folder
 *       independently to the main apps - as we may have unminified
 *       versions - aswell as our Backbone views.
 */
uglify: {
  options: {
    mangle: false
  },
  files: { 
      src: 'assets/scripts/development/*.js',  // source files mask
      dest: 'assets/scripts/production/',    // destination folder
      expand: true,    // allow dynamic building
      flatten: true,   // remove all unnecessary nesting
      ext: '.min.js'   // replace .js to .min.js
  }
},

/**
 * Sass module compiles all SASS files
 * This quickly avoids having to open and save
 * every single css file if a conflict is present
 */
sass: {
  dist: {
    files: [{
      expand: true,
      cwd: 'assets/styles/sass/',
      src: ['*.scss'],
      dest: 'assets/styles/',
      ext: '.css'
    }]
  }
},

/**
 * Image minification for compressing images
 * accross the project and moving them into their own folder
 * all references once production has gone through points to those
 */
imagemin: {
    png: {
        options: {
            optimizationLevel: 7
        },
        files: [
            {
                expand: true,
                cwd: 'assets/images/',
                src: ['**/*.png'],
                dest: 'assets/images/compressed/',
                ext: '.png'
            }
        ]
    },
    jpg: {
        options: {
            progressive: true
        },
        files: [
            {
                expand: true,
                cwd: 'assets/images/',
                src: ['**/*.jpg'],
                dest: 'assets/images/compressed/',
                ext: '.jpg'
            }
        ]
    }
},

/**
 * PHP Code Standards fixer
 * Runs through the app (main code base for each project)
 * to ensure conforms to a standard
 */
phpcsfixer: {
    app: {
        dir: 'app'
    },
    options: {
        bin: 'php-cs-fixer',
        ignoreExitCode: true,
        level: 'all',
        quiet: false,
        diff: true,
        verbose: true
    }
},

jasmine : {
  src : 'assets/scripts/views/*.js',
  options : {
    specs : 'assets/scripts/tests/*.js'
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jasmine');
  grunt.loadNpmTasks('grunt-php-cs-fixer');
  grunt.loadNpmTasks('grunt-contrib-imagemin');
  grunt.loadNpmTasks('grunt-contrib-sass');
  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // Default task(s).
  grunt.registerTask('default', [ 'uglify', 'sass' ] );

  //Jasmine unit tests
  grunt.registerTask('test', [ 'jasmine' ] );

};

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题。在我的情况下,罪魁祸首似乎是select2库,但我不得不使用一个消除过程来解决这个问题。

尝试直接通过phantomjs加载_SpecRunner.html,而不是通过grunt。我使用了一个基本的包装脚本,它与您在PhantomJS主页上看到的基本相同,这样我就可以逐个删除运行器中的脚本标记,直到我有一些没有抛出语法错误的东西。

如果您使用--force运行grunt任务,也可能会获得有关错误来源的更多详细信息。

我无法确定错误的根本原因。

答案 1 :(得分:0)

对我来说,在host添加正确的 Gruntfile.js选项修复了控制台测试(浏览器测试已经有效)。

jasmine: {
    test: {
       src: ['src/<%= pkg.name %>.js'],
           options: {
               specs: ['spec/*-spec.js'],
               outfile: 'spec.html',
               keepRunner: true,
               host: 'http://example.com/folder-containing-to-spec-file/',
               vendor: ['vendor/file.js']
           }
       }
    }
}

如果没有host选项,看起来Phantomjs正在请求来自file:///users/path/to/local/files的内容(显然)不是浏览器可以请求内容的服务器(在本地工作时)。