我们最近升级到JavaScript缩小库的较新版本。如何测试JavaScript缩小输出
经过测试团队进行大量质量保证工作后,发现我们minifier的新版本存在一个问题,它改变了代码块背后的意图和含义。
(生命的教训:除非你真的相信你需要新的版本不升级JS minifiers)
的minifier用于客户端以沉重强调DOM相关活动的JavaScript代码,几乎没有尽可能多的“商业逻辑”。
什么是由minifier升级打破了简单的例子:
function process(count)
{
var value = "";
value += count; //1. Two consecutive += statements
value += count;
count++; //2. Some other statement
return value; //3. Return
}
正确当时精缩到以下几点:
function process(n){var t="";return t+n+n,n++,t}
虽然我们可以写一些单元测试来捕捉一些的问题潜在地,由于JavaScript在DOM交互(数据输入等)方面很重要,所以在没有用户测试(非自动化)的情况下进行彻底测试是非常困难的。我们曾想过使用像Esprima这样的JS to AST库,但考虑到可以对缩小代码进行更改的性质,它会产生太多的误报。
我们也考虑尝试编写具有代表性的测试,但这似乎是一个永无止境的任务(可能会遗漏案例)。
供参考:这是一个非常复杂的Web应用程序,包含几十万行JavaScript代码。
我们正在寻找一种测试缩小过程的方法,因为“只需再次测试一切,彻底并重复测试”。我们希望在这个过程中应用更多的严谨/科学。
理想情况下,如果我们有更好的科学测试方法,我们可以尝试使用多个minifier而不用担心每次都会以新的细微方式破坏我们的代码。
更新:
一个想法,我们必须是:
- 采取缩小与旧版本
- 美化它
- 缩小与新版本,
- 美化,并
- 视觉差异。
它似乎确实是一个好主意,但差异非常普遍,diff工具几乎将每一行标记为不同。
您使用哪种微粉机? – Blender 2013-02-12 20:36:41
我无法说明我与这个问题有多大关系。示例代码充其量是欢闹的。 – Arindam 2013-02-12 20:36:44
@ Blender-Microsoft Ajax Minifier 4.74在这种情况下。 – WiredPrairie 2013-02-12 20:41:02