如何测试JavaScript缩小输出

Wir*_*rie 16 javascript unit-testing

我们最近升级到了一个新的JavaScript缩小库.

经过测试团队的大量质量保证工作后,我们发现新版本的minifier有一个问题,改变了代码块背后的意图和意义.

(生命教训:除非你确信你需要新版本,否则不要升级JS minifiers.)

minifier用于客户端JavaScript代码,重点强调DOM相关活动,而不是"业务逻辑".

minifier升级破坏了什么的简化示例:

function process(count)
{
     var value = ""; 
     value += count; //1. Two consecutive += statements
     value += count;
     count++;        //2. Some other statement
     return value;   //3. Return
}
Run Code Online (Sandbox Code Playgroud)

被错误地缩小为以下内容:

function process(n){var t="";return t+n+n,n++,t}
Run Code Online (Sandbox Code Playgroud)

虽然我们可以编写一些单元测试来捕捉潜在的一些问题,但鉴于JavaScript在DOM交互(数据输入等)上很重要,如果没有用户测试(非自动化),很难彻底测试.我们考虑使用像Esprima这样的JS到AST库,但鉴于可以对缩小代码进行更改的性质,它会产生太多的误报.

我们还考虑过尝试编写代表性测试,但这似乎是一项永无止境的任务(很可能会错过案例).

仅供参考:这是一个非常复杂的Web应用程序,包含数十万行JavaScript代码.

我们正在寻找一种测试缩小过程的方法,而不是"再次测试所有内容,彻底,重复".我们想对这个过程采用更严格/更科学的方法.

理想情况下,如果我们有更好的科学测试方法,我们可以尝试使用多个缩小器,而不必担心每个细节都会以新的细微方式破坏我们的代码.

更新:

我们的一个想法是:

  1. 用旧版本缩小
  2. 美化它
  3. 缩小新版本,
  4. 美化,和
  5. 视觉上差异.

这似乎是一个好主意,但差异是如此普遍,以至于差异工具几乎将每一行标记为不同.

小智 0

您可以看看Selenium Web Driver之类的东西,它允许您在各种环境中自动测试 Web 应用程序。有一些云托管 VM 解决方案可用于进行多环境测试,因此当它在 Webkit 中运行但在 IE 中不起作用时,您不会陷入困境。