【问题标题】:my coffeescript file compiles but mocha gives an error我的咖啡脚本文件编译但 mocha 给出错误
【发布时间】:2014-10-01 08:56:48
【问题描述】:

我有一个项目在其package.json 中使用"coffee-script": "^1.7.1"

代码中有这一行:

[{id: id, name: name}, ...] = result.rows

使用coffeescript 1.7.1版可以很好地编译

问题是我正在尝试使用 mocha 进行单元测试,它在这一行给我一个错误:

Parse error on line xyz: Unexpected '...'

显然 mocha 使用的是较旧的咖啡脚本。有没有办法在不调整 mocha 源的情况下使其工作?

编辑:

我的Gruntfile.coffee:

'use strict'

module.exports = ->
  @initConfig
    cafemocha:
      src: ['test/*.coffee']
      options:
        reporter: 'spec'
        ui: 'bdd'

    coffee:
      compile:
        files:
          'lib/mylib.js': ['src/*.coffee']

  @loadNpmTasks 'grunt-cafe-mocha'
  @loadNpmTasks 'grunt-contrib-coffee'

  @registerTask 'default', ['coffee', 'cafemocha']

我将mocha.opts 添加到test 目录:

--require coffee-script/register
--compilers coffee:coffee-script/register
--reporter spec
--ui bdd

但是,当我运行grunt 时,它仍然给我同样的错误。我是这个环境的新手,觉得太复杂了,请帮忙。

【问题讨论】:

    标签: coffeescript gruntjs mocha.js


    【解决方案1】:

    从版本1.7.x开始CoffeeScript编译器应该被显式注册(参见change log for version 1.7.0)。

    所以,问题在于,当您运行 mocha 测试时,CoffeeScript 编译器没有注册,因此 node.js 将您的所有 .coffee 文件视为 .js 文件。

    最好的解决方案是为您的 mocha 测试指定 --compilers 选项:

    --compilers coffee:coffee-script/register
    

    如果您不想将其包含在每个 mocha 调用中,您可以使用 mocha.opts file 进行设置。

    这里有一些有用的链接:

    更新

    看起来你的问题比我想象的要深得多。

    首先,grunt-cafe-mocha 不尊重 mocha.opts,因为它通过 requireing mocha 作为依赖项运行测试,而不是调用 mocha 测试运行器。

    因此,将require('coffee-script/register') 添加到 gruntfile 的顶部就足够了,如果不是 this old grunt issue

    简而言之,grunt 使用coffee-script 1.3.x,强制其所有任务使用相同版本的咖啡。我在grunt-contrib-connect 上遇到了同样的问题,无法在我的express 应用程序中使用最新的coffee-script

    所以,我可以为您提供的唯一帮助是small grunt task,我写信是为了解决我的一个项目中的类似问题。它在单独的子进程中运行mocha,从而将其与grunt 完全隔离。

    注意我有想过将这个任务发布给npm,但认为它太小了。

    【讨论】:

    • 谢谢!我仍然有同样的问题。请查看我的更新。
    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 2013-06-26
    • 2014-12-12
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多