這個實驗展示了 test code 可讀性演進的過程. 被測物是一個 prototype 為 App
的 object, 我們會測試 .login()
執行成功與失敗的情況.
整個過程我們都採用 mocha 測試框架, 如果你對 mocha 不熟悉, 可以先看看它的文件.
1-first-attempt.js
結構清楚, 採用 AAA(Arrang-Act-Assert) 三段敘述, 但仔細看, 每個 it block 都有不少重複的 code.
2- mimic-rspec-using-alias.js
替 it/before/beforeEach 取別名, 成為 Given/When/Then (由於before與beforeEach的執行順序無法完全模仿 rspec-given, 這裡增加了一個 GivenEach).
使用 Given/When/Then 並且讓每一個敘述都保持一行, 程式變得簡潔許多. 每個 context 中「變動的參數」與「assert的條件」被突顯出來, 沒有被細節淹沒.
3-back-to-normal.js
則是把 alias 還原, 看看 mocha 原生 API 的表現. 好像不那麼自然了? 的確, 使用 before, it 這些詞彙時, 我們不會想這樣使用它們. 語言與詞彙會影響使用者的思考方式.