init
This commit is contained in:
101
scripts/test-api.js
Normal file
101
scripts/test-api.js
Normal file
@@ -0,0 +1,101 @@
|
||||
// API 測試腳本
|
||||
const http = require('http')
|
||||
|
||||
async function testAPI() {
|
||||
console.log('🧪 開始測試 API 端點...\n')
|
||||
|
||||
// 測試資料庫連接
|
||||
console.log('1️⃣ 測試資料庫連接...')
|
||||
try {
|
||||
const dbResponse = await makeRequest('/api/database/test')
|
||||
console.log(' ✅ 資料庫連接正常')
|
||||
console.log(` 📊 回應: ${JSON.stringify(dbResponse, null, 2)}`)
|
||||
} catch (error) {
|
||||
console.log(' ❌ 資料庫連接失敗:', error.message)
|
||||
}
|
||||
|
||||
// 測試 KPI API
|
||||
console.log('\n2️⃣ 測試 KPI API...')
|
||||
try {
|
||||
const kpiResponse = await makeRequest('/api/kpi?userId=user_001')
|
||||
console.log(' ✅ KPI API 正常')
|
||||
console.log(` 📊 找到 ${kpiResponse.length} 個 KPI`)
|
||||
kpiResponse.forEach(kpi => {
|
||||
console.log(` - ${kpi.title}: ${kpi.current_value}/${kpi.target_value} ${kpi.unit}`)
|
||||
})
|
||||
} catch (error) {
|
||||
console.log(' ❌ KPI API 失敗:', error.message)
|
||||
}
|
||||
|
||||
// 測試用戶 API
|
||||
console.log('\n3️⃣ 測試用戶 API...')
|
||||
try {
|
||||
const usersResponse = await makeRequest('/api/users')
|
||||
console.log(' ✅ 用戶 API 正常')
|
||||
console.log(` 📊 找到 ${usersResponse.length} 個用戶`)
|
||||
usersResponse.slice(0, 3).forEach(user => {
|
||||
console.log(` - ${user.name} (${user.role})`)
|
||||
})
|
||||
} catch (error) {
|
||||
console.log(' ❌ 用戶 API 失敗:', error.message)
|
||||
}
|
||||
|
||||
// 測試評審 API
|
||||
console.log('\n4️⃣ 測試評審 API...')
|
||||
try {
|
||||
const reviewsResponse = await makeRequest('/api/reviews')
|
||||
console.log(' ✅ 評審 API 正常')
|
||||
console.log(` 📊 找到 ${reviewsResponse.length} 個評審`)
|
||||
reviewsResponse.forEach(review => {
|
||||
console.log(` - ${review.review_type} 評審 (${review.status})`)
|
||||
})
|
||||
} catch (error) {
|
||||
console.log(' ❌ 評審 API 失敗:', error.message)
|
||||
}
|
||||
|
||||
console.log('\n🎉 API 測試完成!')
|
||||
}
|
||||
|
||||
function makeRequest(path) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
port: 3006,
|
||||
path: path,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
}
|
||||
}
|
||||
|
||||
const req = http.request(options, (res) => {
|
||||
let data = ''
|
||||
|
||||
res.on('data', (chunk) => {
|
||||
data += chunk
|
||||
})
|
||||
|
||||
res.on('end', () => {
|
||||
try {
|
||||
const jsonData = JSON.parse(data)
|
||||
resolve(jsonData)
|
||||
} catch (error) {
|
||||
reject(new Error(`解析回應失敗: ${error.message}`))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
req.on('error', (error) => {
|
||||
reject(new Error(`請求失敗: ${error.message}`))
|
||||
})
|
||||
|
||||
req.setTimeout(5000, () => {
|
||||
req.destroy()
|
||||
reject(new Error('請求超時'))
|
||||
})
|
||||
|
||||
req.end()
|
||||
})
|
||||
}
|
||||
|
||||
testAPI().catch(console.error)
|
Reference in New Issue
Block a user