我們最近升級到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