我的项目在其"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
时,它给了我同样的错误。我是这个环境的新手,我发现它太复杂了,请帮忙。
答案 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进行设置。
以下是一些有用的链接:
mocha
docs 看起来你的问题比我想的要深得多。
首先,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
,但认为它太小了。