测试JS模块是CommonJS还是AMD兼容

时间:2014-07-18 13:52:04

标签: javascript unit-testing gruntjs amd commonjs

如果JavaScript模块与CommonJS(Node)或AMD模块格式兼容,有没有办法自动测试?那么,怎么能把它写成Grunt任务呢?

兼容性是模块的一个重要特征,应该至少在某种程度上能够自动进行测试。例如,建筑物配置的更改可能会产生一个复杂性错误,单独使用模块的浏览器界面的单元测试无法注意到这一点,就像使用QUnit一样。也许模块的兼容性代码(例如,自制的UMD wrapper)可能非常混乱,以至于很难说代码中其他地方的更改是否会影响模块的兼容性部分。代码。

可以使用生成可能正确的不同模块格式包装的工具。例如,grunt-umduRequire就是这样的工具。但是,由于它们也依赖于构建配置,如何确保在没有任何测试的情况下确实存在兼容性?

1 个答案:

答案 0 :(得分:2)

我认为没有开箱即用或明显的解决方案。

通常,您可以采取几种方法来解决问题:

  1. 以一种模块格式编写代码,并使用转换器生成其他模块格式。 Babel(5)非常擅长这样做,但可能还有其他人。
  2. 使用esprima之类的解析器并静态分析代码。像https://github.com/umdjs/umd那样的“标准”包装器可能很容易检测到模式。自定义包装可能更难,您可能需要一些修改才能完成。
  3. 试错:让您的grunt任务创建文件(例如,从.jade模板生成),包括您关注的每种方式(AMD,浏览器全局)中的假定模块,然后“运行”那些(例如使用守夜人或硒)并查看是否发生任何错误。 (如果您尝试加载的模块具有依赖关系,则可能很难做到这一点)