2016年1月26日 星期二

對 ES6 的程式作單元測試

距離「號稱釋出確定的規格」的幾個月之後,既使是在技術前端的 NodeJS ,也依然沒有完全支援 ES6 的所有語法。就不用說那些依附在 NodeJS 之上開發出來的模組。看到大多數的實作方法,靠 Babel 來作轉譯回 ES5 語法,再進行後續的工作。

對於我這種等級的開發者, Babel 背後運作的原理、語法分析的實作方式都屬於玄之又玄的事物。大多數只要結果正確的狀況,根本不會想去看懂那轉回 ES5 語法的樣子。不過事情總有例外⋯ 就是作 Unit test 的時候。

在我使用的 jasmine 模組中,錯誤訊息會帶有例外產生在哪個檔案的哪一行,對於查找原因是很方便的。不過一但轉換成 ES5 語法之後,每個指令不會在和 ES6 原始檔相同的位置,造成許多困懮,需要有「好心人」作轉譯的工作。

後來找到了 「jasmine-es6」這個模組,只要把它裝在 global ,就可以直接使用原來的 「jasmine」指令進行如原先一般的單元測試,出錯的時候也會對應回 ES6 原始檔的行號,很方便。

npm i -g jasmine-es6

jasmine-es6 本身會改變 jasmine 模組的程式內容。所以若是移除重裝 jasmine 後,要記得再裝一次 jasmine-es6 將擴充的功能再設定回去。

PS.
後來發現一個叫作 「jasmine-babel」的模組,讓我後來再安裝的時候搞混。雖然在 npm 上可以查得到它,不過對應的 github 路徑已經不存在了。應該是一個不再維護的專案吧~

另外,如果使用 gulpfile.babel.js 以及搭配相關的模組來以 ES6 語法執行 gulp task。其中 gulp-jasmine 能夠在沒有 jasmine-es6 的狀態下執行。不過我還不會用它來顯示錯誤的行號,不確定有沒有支援顯示錯誤在原始檔行號的功能。