Day12,完成這階段的最後一個步驟:
API 驗證系統的測試撰寫與文件更新,將基本的 API 轉化為 生產等級的系統,具備完善的驗證邏輯、錯誤處理與測試覆蓋率。
本次測試共建立 64 個測試案例,涵蓋三大核心模組:
Validator Tests (src/test/validation/validators.test.js
- 32 個測試)
驗證單一欄位或值的合法性,包括:
Schema Tests (src/test/validation/schemas.test.js
- 15 個測試)
驗證複雜資料結構或整個物件:
Middleware Tests (src/test/validation/middleware.test.js
- 17 個測試)
驗證 Express 中介軟體的行為:
使用 Jest 作為測試框架
ValidationUtils 負責單欄位或值的驗證:
ValidationUtils.validateEmail(email)
ValidationUtils.validatePassword(password, options)
ValidationUtils.validateObjectId(id)
ValidationUtils.validateDate(date, options)
ValidationUtils.validatePhoneNumber(phone)
ValidationUtils.validateNumericRange(number, options)
ValidationUtils.validateString(str, options)
ValidationUtils.validateArray(array, options)
ValidationUtils.validateEnum(value, enumList, options)
ValidationUtils.sanitizeInput(input)
ValidationUtils.validateFile(file, options)
ValidationSchemas 定義資料結構規則:
userRegistration
、rehabTaskCreation
、progressSession
等validateSchema(data, schema) 將資料與 Schema 對照,回傳驗證結果:
const result = ValidationUtils.validateSchema(userData, ValidationSchemas.userRegistration);
if (!result.isValid) console.log(result.errors);
正向測試 (Valid Data)
輸入完整且正確的資料,預期結果為 isValid = true
,errors = null
例:
expect(result.isValid).toBe(true);
expect(result.errors).toBe(null);
負向測試 (Invalid Data)
輸入格式錯誤或缺少必要欄位的資料,確認錯誤欄位是否正確回報
例:
expect(result.isValid).toBe(false);
expect(result.errors.firstName).toBeDefined();
expect(result.errors.email).toBeDefined();
邊界與選填測試 (Optional / Empty Fields)
測試非必填欄位可否留空,避免系統誤拒
例:
const minimalUserData = { firstName, lastName, email, password, role };
const result = ValidationUtils.validateSchema(minimalUserData, ValidationSchemas.userRegistration);
expect(result.isValid).toBe(true);
jest.config.js
設定測試模式、覆蓋率門檻、測試檔案匹配規則同時對 README.md 做了全面更新,包含:
這兩個步驟將原本的 基本 API 轉變為 生產等級系統:
專案Github Repo : https://github.com/CHING-WENLAI1031/Rehab_Tracker