Jest AAA 測試原則入門教學筆記 | 學習筆記

Posted by kdchang on 2018-02-01


範例測試:saveMoney 方法

atm.js

class ATM {
constructor(balance) {
this.balance = balance;
}
saveMoney(amount) {
if (amount <= 0) {
throw new Error('Amount must be positive');
}
this.balance += amount;
return this.balance;
}
withdrawMoney(amount) {
if (amount <= 0) {
throw new Error('Amount must be positive');
}
if (amount > this.balance) {
throw new Error('Insufficient balance');
}
this.balance -= amount;
return this.balance;
}
getBalance() {
return this.balance;
}
reset() {
this.balance = 0;
}
setBalance(balance) {
if (balance < 0) {
throw new Error('Balance cannot be negative');
}
this.balance = balance;
}
}

export default ATM;

atm.test.js

import ATM from '../atm.js';

test('saveMoney adds money to balance', () => {
// Arrange: 建立一個 ATM 實例,初始餘額 0
const atm = new ATM(0);

// Act: 存入 1000
atm.saveMoney(1000);

// Assert: 餘額應該變成 1000
expect(atm.balance).toBe(1000);
});

逐步對應:

步驟 內容
Arrange 建立 ATM 物件並給初始值
Act 呼叫 saveMoney(1000)
Assert 驗證 atm.balance 是否等於 1000

另一個範例:檢查錯誤拋出

如果要測試當金額是負數時會丟錯誤:

test('saveMoney throws error when amount <= 0', () => {
// Arrange
const atm = new ATM(0);

// Act & Assert
expect(() => atm.saveMoney(0)).toThrow('Amount must be positive');
});

這裡因為 actassert 綁在一起,所以在 expect 裡包了一個 function,來驗證是否拋出錯誤。


完整測試檔(用 AAA 標註)

import ATM from '../atm.js';

test('saveMoney adds money to balance', () => {
// Arrange
const atm = new ATM(0);

// Act
atm.saveMoney(1000);

// Assert
expect(atm.balance).toBe(1000);
});

test('saveMoney throws error when amount <= 0', () => {
// Arrange
const atm = new ATM(0);

// Act & Assert
expect(() => atm.saveMoney(0)).toThrow('Amount must be positive');
});

歡迎分享按讚給予支持和鼓勵!


Related Posts

Comments