編寫可靠的JavaScript代碼測試驅動開發JavaScript商業軟體

基本簡介,圖書目錄,

基本簡介

本書分為5個部分: 第Ⅰ部分“奠定堅實的基礎”涵蓋了軟體工程的關鍵概念,例如SOLID和DRY原 則,還討論了單元測試和測試驅動開發的優點。 在第Ⅱ部分“測試基於模式的代碼”中,我們描述並使用測試驅動開發創建了 幾個有用的代碼模式。 第Ⅲ部分“測試和編寫高級JavaScript特性”描述了如何使用和測試 JavaScript語言更高級的特性。 第Ⅳ部分“測試中的特殊主題”提供了測試DOM操作的樣例,還演示了用於增 強代碼標準的靜態分析工具的使用。第Ⅴ部分“總結”回顧了測試驅動開發的概念,還展示了一些本書用到的JavaScript習 語。

圖書目錄

第Ⅰ部分 奠定堅實的基礎
第1章 實踐軟體工程 3
1.1 編寫從開始就正確的代碼 4
1.1.1 掌握JavaScript的特性 4
1.1.2 在大型系統中規避JavaScript陷阱 15
1.1.3 套用軟體工程原則 17
1.2 編寫保持正確的代碼 22
1.2.1 投資單元測試的未來 22
1.2.2 實踐測試驅動開發 22
1.2.3 編寫易於測試的代碼 23
1.3 小結 26
第2章 準備工具 27
2.1 使用測試框架 27
2.1.1 辨別不正確的代碼 30
2.1.2 可測試性設計 32
2.1.3 編寫最少的代碼 33
2.1.4 安全維護和重構 33
2.1.5 可運行規範 34
2.1.6 當前的開源和商業框架 34
2.1.7 介紹Jasmine 36
2.2 使用依賴注入框架 41
2.2.1 依賴注入的定義 41
2.2.2 使用依賴注入讓代碼更可靠 43
2.2.3 掌握依賴注入 43
2.2.4 案例研究:編寫一個輕量級依賴注入框架 43
2.2.5 使用依賴注入框架 50
2.2.6 當前的依賴注入框架 52
2.3 使用切面工具 53
2.3.1 案例研究:使用和不使用AOP進行快取 53
2.3.2 案例研究:構建Aop.js模組 55
2.3.3 其他AOP庫 67
2.3.4 結論 68
2.4 使用代碼檢查工具 68
2.4.1 使用linting工具讓代碼更可靠 68
2....
2.4.2JSHint簡介 71
2.4.3其他工具 73
2.4.4嚴格模式 74
2.5小結 74
第3章構造可靠的對象 75
3.1使用原生數據 75
3.2使用對象字面量 77
3.3使用模組模式 78
3.3.1創建任意模組 78
3.3.2創建立即執行模組 79
3.3.3創建可靠的模組 80
3.4使用對象原型和原型繼承 80
3.4.1默認對象原型 80
3.4.2原型繼承 81
3.4.3原型鏈 82
3.5使用new創建對象 83
3.6使用類繼承 88
3.6.1模擬類繼承 88
3.6.2重複將殺死Kangaroo 89
3.7使用函式式繼承 91
3.8猴子補丁(Monkey-Patching) 92
3.9小結 95
第Ⅱ部分測試基於模式的代碼
第4章瀏覽各種模式的優點 99
4.1案例分析 99
4.2通過更廣泛的辭彙產生更加優雅的代碼 100
4.3使用擁有良好設計、良好測試的構建塊產生可靠的代碼 101
4.4小結 102
第5章確保回調模式的正確使用 103
5.1通過單元測試了解回調模式 104
5.1.1編寫和測試使用了回調函式的代碼 104
5.1.2編寫和測試回調函式 109
5.2避免問題 113
5.2.1扁平化回調箭頭 113
5.2.2注意this變數 115
5.3小結 119
第6章確保承諾模式的正確使用 121
6.1通過單元測試了解承諾 122
6.1.1使用承諾 122
6.1.2構造和返回承諾 127
6.1.3測試XMLHttpRequest 130
6.2串聯承諾 133
6.3使用承諾封裝器 134
6.4了解狀態和命運 135
6.5區分標準承諾和jQuery承諾 135
6.6小結 136
第7章確保正確使用散函式應用程式 137
7.1對散函式應用程式進行單元測試 137
7.2為散函式應用程式創建切面 139
7.3區分散函式應用程式和柯里化 140
7.3.1柯里化 140
7.3.2散函式應用程式 141
7.4小結 141
第8章確保備忘錄模式的正確使用 143
8.1通過單元測試了解備忘錄模式 144
8.2使用AOP添加備忘錄 147
8.2.1創建備忘錄切面 147
8.2.2為restaurantApi套用returnValueCache切面 150
8.3小結 152
第9章確保單例模式的正確實現 153
9.1通過單元測試了解單例模式 154
9.1.1使用對象字面量實現單例共享快取 154
9.1.2使用模組實現單例共享快取 158
9.2小結 162
第10章確保工廠模式的正確實現 163
10.1為工廠編寫單元測試 163
10.2實現工廠模式 169
10.3考慮其他工廠類型 171
10.4小結 171
第11章確保沙箱模式的正確實現和使用 173
11.1通過單元測試了解沙箱模式 173
11.1.1創建部件沙箱 174
11.1.2創建和測試沙箱工具 187
11.1.3創建與沙箱一起使用的函式 191
11.2小結 193
第12章確保裝飾器模式的正確實現 195
12.1使用測試驅動的方式開發裝飾器 196
12.1.1為被裝飾的對象編寫一個假對象 197
12.1.2為錯誤的傳遞編寫測試 198
12.1.3編寫空白裝飾器 199
12.1.4添加傳遞功能到裝飾器 200
12.1.5驗證成功傳遞 202
12.1.6添加裝飾器的特性 204
12.1.7通用化裝飾器 210
12.2小結 211
第13章確保策略模式的正確實現 213
13.1通過單元測試了解該模式 213
13.1.1在不使用策略模式的情況下實現transportScheduler 214
13.1.2使用策略模式實現transportScheduler 216
13.2小結 227
第14章確保代理模式的正確實現 229
14.1通過測試驅動的方式開發代理 230
14.2小結 245
第15章確保正確實現可連結方法 247
15.1通過單元測試了解該模式 248
15.2連結then方法 255
15.3小結 257
第Ⅲ部分測試和編寫高級JavaScript特性
第16章在無接口語言中遵守接口 261
16.1了解接口的優點 262
16.2了解接口隔離原則 263
16.3使用測試驅動開發創建契約註冊表 265
16.3.1定義契約 266
16.3.2判斷是否履行了契約 267
16.3.3斷言契約被履行了 271
16.3.4繞過契約執行 273
16.3.5創建在被返回(創建)的對象上實施契約的切面 273
16.4小結 277
第17章確保正確的參數類型 279
17.1了解JavaScript無類型參數帶來的機會和風險 280
17.2擴展ContractRegistry檢查參數 280
17.2.1界定任務範圍 280
17.2.2判斷集合中的所有變數是否都履行了它的契約 281
17.2.3斷言集合中的所有變數都履行了它的契約 289
17.2.4在切面中打包參數檢查功能 290
17.3支持契約庫 292
17.4綜合起來 293
17.4.1創建契約模組 293
17.4.2創建應用程式的ContractRegistry 296
17.4.3為生產發布繞過契約 297
17.5比較面向切面的解決方案和靜態解決方案 297
17.5.1考慮TypeScript的優點 297
17.5.2考慮切面的優點 297
17.6小結 298
第18章確保正確使用call、apply和bind 299
18.1瀏覽this是如何綁定的 299
18.1.1默認綁定 300
18.1.2隱式綁定 302
18.1.3new綁定 303
18.1.4顯式綁定 305
18.2創建和測試使用call、apply和bind的代碼 305
18.2.1使用call和apply 305
18.2.2使用測試驅動開發創建一個Array.prototype.forEachPolyfill 307
18.2.3使用bind 316
18.3小結 321
第19章確保正確使用方法借用 323
19.1確保借用對象符合需求 324
19.1.1讓被借用的函式驗證借用者的資格 324
19.1.2向被借用的對象附加切面 326
19.1.3使用borrow()方法 329
19.1.4在ContractRegistry中添加對象驗證器 330
19.2預期借用者的副作用 331
19.2.1考慮被隔離函式的副作用 331
19.2.2考慮調用其他函式的函式的副作用 332
19.3預期捐贈者對象的副作用 338
19.4小結 339
第20章確保正確使用混合 341
20.1創建和使用混合 343
20.1.1創建和使用傳統混合 344
20.1.2創建和使用函式式混合 361
20.2小結 367
第21章測試高級程式架構 369
21.1確保觀察者模式的可靠使用 369
21.1.1檢查觀察者模式 370
21.1.2增強觀察者模式的可靠性 376
21.2確保中介者模式的可靠使用 380
21.2.1了解中介者模式 381
21.2.2增強基於中介者代碼的可靠性 382
21.3小結 395
第Ⅳ部分測試中的特殊主題
第22章測試DOM訪問 399
22.1對UI進行單元測試 399
22.1.1檢查難於測試的UI代碼 400
22.1.2使用TDD創建UI組件 401
22.2使用分析器最佳化代碼 411
22.2.1檢測低效代碼 411
22.2.2避免不成熟的最佳化 418
22.3小結 418
第23章確保符合標準 419
23.1使用ESLint 420
23.1.1安裝ESLint 420
23.1.2運行ESLint 424
23.1.3使用ESLint實施代碼標準 427
23.2實施架構分離 432
23.2.1家庭秘密技術 433
23.2.2銘記技術 435
23.2.3不可能任務(MissionImpossible)技術 437
23.2.4魔術棒(MagicWand)
技術 441
23.2.5不要使用調用棧技術 442
23.2.6其他技術 442
23.2.7其他架構 442
23.3小結 443
第Ⅴ部分總結
第24章測試驅動開發原則的總結 447
24.1回顧值得使用測試驅動開發的原因 447
24.2練習測試驅動開發 448
24.3編寫可單元測試的代碼 448
24.4掌握測試驅動開發的
技術 448
24.4.1在編碼之前編寫測試 448
24.4.2保持測試DRY 449
24.4.3首先測試錯誤條件 449
24.4.4測試要先易後難 449
24.4.5具體 449
24.4.6隻測試一件事情 450
24.4.7測試數據如同測試一樣重要 450
24.4.8高效地使用Jasmine 450
24.5測試本書描述的模式 450
24.5.1測試面向切面編程 450
24.5.2測試對象構造 451
24.5.3測試回調 451
24.5.4測試基於承諾的代碼 451
24.5.5測試散函式應用程式 451
24.5.6測試備忘錄模式 452
24.5.7測試單例模式 452
24.5.8測試工廠模式 452
24.5.9測試沙箱 452
24.5.10測試裝飾器模式 453
24.5.11測試策略模式 453
24.5.12測試代理模式 453
24.5.13測試可連結方法 453
24.5.14測試接口一致性 453
24.5.15測試call和apply的
使用 453
24.5.16測試方法借用模式 454
24.5.17測試混合 454
24.5.18測試中介者和觀察者模式 454
24.5.19測試DOM訪問 454
24.5.20實施架構分離的測試 454
24.6小結 455
第25章本書JavaScript習語的總結 457
25.1回顧對象 457
25.1.1可以添加和刪除的對象屬性 457
25.1.2可以將對象用作詞典 458
25.2回顧變數 459
25.2.1提升變數聲明 459
25.2.2變數有函式作用域 460
25.3回顧函式 463
25.3.1函式是對象 463
25.3.2提升函式聲明 463
25.3.3函式沒有返回類型 464
25.3.4函式可以是匿名的 465
25.3.5函式可以被嵌套 465
25.3.6函式調用可以使用任意數量的參數 466
25.3.7函式可以立即被調用 467
25.4回顧布爾操作 468
25.4.1在測試相等性時類型可能會被強制轉換 468
25.4.2值可以是真或假 469
25.5小結 469

熱門詞條

聯絡我們