iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
Modern Web

Angular TDD (Test-driven development ) 從0到1系列 第 4

Angular TDD 測試從0到1: Day 4 撰寫測試須知

  • 分享至 

  • xImage
  •  

follow測試的3A法則

  • Arrange: 初始化必要物件,設定mock data
  • Act: 測項的執行過程
  • Assert: 驗證預期結果

根據AAA法則,可維持「測試」程式碼的可讀性、和可維護性,任何人看了unit test內容即能一目了然要測試項目和預期結果。

例如:

it('should create', () => {

  // arrange
  const txt = 'Hello world';
  const txtElem = element.querySelector('.data-test');
  
  // act
  component.txt = txt;
  fixture.detectChanges();
  
  // assert
  expert(txtElem.textContent).toContain(txt);
})

除了follow 3A之外,撰寫測試的時候,可以先用註解寫下測試步驟,在依序實現測試案例,會有助於撰寫測試案例的思考方向,且更為專注單一測項上。
舉例:

describe('DataService', () => {
  beforeEach( ()=> TestBed.configureTestingModule({}));
  
  it('should return the list of homes', () => {
    // 1.Spy on and mock the HttpClient
    // then do sth...
    
    // 2.Use our service to get homes
    // then do sth...
    
    // 3.Verify that the service returned mocked data
    // then do sth...
    
    // 4.Verify that the service called the proper HTTP endpoint
    // then do sth...
    
  })
})

確保測試follow以下:

  1. 只要程式碼有更改過,測試案例也要同步重構再重構
  2. 留意命名,確保程式碼的可讀性
  3. 單元測試要專注驗證單一案例
  4. 測試案例要避免耦合性太高

新手撰寫測試可能會遇到關卡

  1. 「測試」和「實做」兩者是不同的思考方向,

一開始可能會覺得:「啊!好想趕快把功能寫完,可以用舊好了」,或者「阿!我知道測試很重要,但先完成功能實做,回頭再補好了」。

通常有這種聲音出現,就表示「撰寫測試」這件事就沒有然後了。
曾聽說:「當覺得不適應的時候,代表已經在改變的過程中,習慣它、面對它、接受它」
所以,頭先洗下去吧!(笑)

  1. 專注只測試某一項,就像石頭卡在鞋子裡

「小孩才做選擇,我全都要」這樣的話還蠻常聽到的,當開發到忘我的時候,會忘記個別實現功能的重要,而不是只追求程式碼可以run就好。

當程式碼隨時間變複雜,勢必要重構再重構,所以將功能獨立出來就顯得重要,在「測試的世界」也是,這也像SOLID的S -> Single Responsibility Principle (SRP) 單一執行原則。

一個功能,只做一件事,專注執行那一件事,其實不只「實現」、「測試」,學習也是。

所以,「專注做好一件事」。

下一篇要進入「名詞介紹」


上一篇
Angular TDD 測試從0到1: Day 3 為什要寫測試?能用就好了吧?!
下一篇
Angular TDD 測試從0到1: Day 5 Karma 介紹
系列文
Angular TDD (Test-driven development ) 從0到130
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言