3A 測試原則:Arrange, Act, Assert

3A 原則是測試中常用的一種模式,特別適用於單元測試。3A 代表三個關鍵步驟:

1. Arrange (準備)

  • 在這個階段,你設置測試所需的所有條件和環境

  • 創建測試物件、準備測試數據、設置模擬(mocks)或存根(stubs)

  • 對於 Angular 元件測試,通常包括配置 TestBed、實例化元件、設置輸入屬性等

2. Act (執行)

  • 在這個階段,你執行被測試的代碼或功能

  • 調用被測試的方法、觸發事件、模擬用戶交互等

  • 例如,點擊按鈕、改變輸入值、調用元件的公共方法等

3. Assert (斷言)

  • 在這個階段,你驗證結果是否符合預期

  • 檢查方法返回值、元件狀態變化、DOM 變更等

  • 使用 Jasmine 的 expect 函數和匹配器來表達預期結果

實際例子

如果要測試你的 multiple-select 元件的 clear() 方法,使用 3A 原則的測試可能看起來像這樣:

it('should clear all selected values when clear method is called', () => {
  // Arrange
  component.value = ['option1', 'option2'];
  
  // Act
  component.clear();
  
  // Assert
  expect(component.value).toEqual([]);
  expect(component.selectionChange.emit).toHaveBeenCalledWith([]);
});

3A 原則的好處

  1. 結構清晰:測試代碼有明確的結構,易於閱讀和理解

  2. 職責分離:每個部分都有明確的職責

  3. 易於維護:當測試失敗時,容易定位問題是出在哪個階段

  4. 易於擴展:可以輕鬆地添加更多的測試場景

在實際編寫測試時,你可以用註釋或空行來區分這三個階段,使測試代碼更加清晰。這種模式可以應用於所有類型的測試,不僅僅是 Angular 元件測試。

Last updated