如何测试Harmony/ES6/ECMAScript 6 JavaScript?

5
根据标题,我正在尝试测试使用ES6 JS编写的一些AMD模块,并在nodejs上运行。

我首先尝试了Intern:即使在nodejs中启用了--harmony,但我最终面对了Intern的依赖链,在例如Istanbulesprima和其他位置无法启用Harmony(我为此打开了一个issue)。

然后我转向mocha,在这里我被困住了...奇怪的是。我为nodejs和mocha本身都启用了Harmony,这是package.json测试脚本:

"test": "node --harmony node_modules\\mocha\\bin\\mocha tests --harmony --recursive"

我在命令提示符中运行 npm test my_test_folder 命令。然而,一些 ES6 构造(例如 const)可以正常通过,但它在解构赋值时卡住了。以下是输出的前几行:

const { log, dir } = require('../consoleLogger.js');
      ^
SyntaxError: Unexpected token {
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    [...continues...]

我也查阅了这个 SO讨论串,并听说过转换器,但我不确定它们是否可行,现在我正在尝试让转换器在这种情况下起作用。

有什么想法可以解决这个问题,而不需要改变代码中散布的所有ES6位? TA。


当您不使用Mocha时,您能否使用Harmony的任何功能?如果在不使用Mocha时它无法工作,则在使用Mocha时也无法工作。 - Louis
不错的观点,尽管代码是Thunderbird插件的一部分,在那里Harmony功能正在工作。在这里,我正在尝试从(node)命令行运行测试,因此问题现在出现了。 - superjos
由于没有人提到它,请查看http://kangax.github.io/compat-table/es6/。 - Jared Smith
2个回答

4

我一直在使用

npm install mocha-traceur

mocha ./tests/* --compilers js:mocha-traceur 

现在它已经可以完美运作!


谢谢,我一旦再次疯狂地投入到Thunderbird开发中,就会尝试这个。 - superjos

1

V8目前还没有实现解构,所以在一段时间内它将不可用于Node。块级作用域(包括const)大部分已经实现,但请注意,ES6之前的版本中始终可用const,因此您可能需要仔细检查您实际观察到的内容--您可以尝试使用'let'声明来减少歧义。


感谢反馈。一开始我只是尝试运行mocha(所以使用普通的node),但在const上出现了错误。然后我在调用node时启用了--harmony,并继续解决下一个问题。无论如何,我正在尝试在运行mocha之前进行ES5转译。 - superjos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接