深入指南
測試

Zone.js 測試工具

本指南說明主要用於在單元測試中管理與控制非同步工作的測試工具。這些工具本質上是 Zone.js 專屬的模擬時鐘工具,特別適用於控制測試中非同步操作的流程。

關於一般的 Angular 測試工具,包括 TestBed 與 ComponentFixture,請參閱測試工具 API 指南。

以下是 Zone.js 專屬函式的摘要:

Function Details
waitForAsync 追蹤非同步工作,只有在測試區中不再有任何微任務或巨任務殘留時,才完成測試。
fakeAsync 在特殊的 fakeAsync 測試區 中執行測試(it)的主體,實現線性的控制流程寫法。
tick 透過排空 fakeAsync 測試區 內的_計時器_與_微任務_佇列,模擬時間的流逝與待處理非同步活動的完成。對這方面有興趣、想深入鑽研的讀者,或許會喜歡這篇長篇部落格文章:"Tasks, microtasks, queues and schedules"。它接受一個選用引數,將虛擬時鐘向前推進指定的毫秒數,清除在該時間範圍內排程的非同步活動。
discardPeriodicTasks 捨棄在 fakeAsync Zone 內建立的任何週期性工作(例如 setInterval)。
flushMicrotasks 當 fakeAsync() 測試在結束時有待處理的_微任務_(例如尚未完成的 promise),測試會以明確的錯誤訊息失敗。
一般來說,測試應該等待微任務完成。當預期會有待處理的微任務時,呼叫 flushMicrotasks 排空_微任務_佇列即可避免這個錯誤。