2014-08-31 30 views
11

在我的测试目录中,我有一个文件mocha.opts包含以下内容:摩卡是否忽略了mocha.opts中的--harmony选项?

--harmony 
--recursive 
--growl 
--reporter spec 
--require should 

当我运行mocha,我得到以下错误:

/project/server/utilities/encryption.js:3 
const 
^^^^^ 
SyntaxError: Use of const in strict mode. 

这是当然的,因为我使用const需要ES6和谐。当我运行mocha --harmony时,我的测试执行得很好。我的mocha.opts文件中的其他条目按预期工作。

由于某种原因,mocha.opts文件是否忽略--harmony参数?还是我做错了?摩卡文档没有详细说明,我也无法在这里或其他任何地方找到答案。

回答

18

提问者问:

When I run mocha --harmony , my tests execute just fine. [...]

Does the mocha.opts file ignore the --harmony argument for some reason?

是,mocha.opts忽略--harmony说法。 --harmony选项不是Mocha选项,而是Node.js选项。这是一个必须它开始执行前被传递到Node.js的的选项。然而,Node.js的开始之后mocha.opts被读取并因此即使摩卡是能够理解的选项,这将不能够做任何事情。

但为什么它的命令行上运行?当我运行mocha --harmony时,摩卡是不是应该在解析--harmony选项之前首先启动?不,因为mocha是启动“真正”摩卡的脚本。 shell脚本检测到--harmony并确保它在启动“真正”Mocha时传递给Node.js。

+0

精辟解释,谢谢。 – user3112401 2015-01-08 15:11:04

+1

Nitpick - 摩卡是一个叫做真正摩卡的js脚本。它不是一个shell脚本。 – manojlds 2015-01-25 21:57:51

+1

摩卡可以使用'execv()'本身与“适当的节点”取代。每个人都会这么做。 – toriningen 2015-06-04 20:34:22

0

它不支持的东西,你可以包括mocha.opts。当您致电mocha时,您可以添加到命令行中。请参阅this