我的coffeescript文件编译,但摩卡给出了一个错误

时间:2014-08-07 23:42:53

标签: coffeescript gruntjs mocha

我的项目在其"coffee-script": "^1.7.1"中使用了package.json

代码中有这一行:

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

使用coffeescript版本1.7.1

进行编译

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

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

显然,mocha使用较旧的coffeescript。有没有办法让它工作而不调整摩卡的来源?

编辑:

我的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时,它给了我同样的错误。我是这个环境的新手,我发现它太复杂了,请帮忙。

1 个答案:

答案 0 :(得分:3)

从版本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,因为require mocha作为依赖项运行测试,而不是调用mocha测试运行器。

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

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

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

N.B。我考虑过将此任务发布到npm,但认为它太小了。