在寫程式的世界裡,最怕的就是「我以為沒問題,結果一堆 bug」。這篇筆記要帶你認識如何用「測試」和「CI/CD」幫助我們自動檢查錯誤、提升開發效率!
🧪 測試是什麼?為什麼要測試?
測試就是「寫程式來測試程式」,聽起來有點繞,但其實很簡單:
你寫了一個功能,接著寫一段測試程式來確認它真的能正常運作。這樣就不怕改了某個地方,結果其他功能跟著壞掉。🛠️ Manual vs Automated Test:手動測試 vs 自動測試

本圖由 AI 協助生成
常見測試類型簡介
1. Unit Test(單元測試)
測試「一個函式」或「一個模組」是否正確。像是你寫了一個加法函式,就測試它加 1+2 是不是等於 3。
簡單的概念示範(本程式碼由 AI 生成)
在測試前,要先準備好專案資料夾喔!(Windows 會擋 npm 可以請 AI 教學開啟)

// utils/math.js
function add(a, b) {
return a + b;
}
module.exports = { add };
// tests/math.test.js
const { add } = require('../utils/math');
test('加法函式:1 + 2 應該等於 3', () => {
expect(add(1, 2)).toBe(3);
});
2. Integration Test(整合測試)
測試「多個模組之間的互動」。例如你有登入功能,要測試輸入帳密 → 查資料庫 → 回傳結果這整個流程是否順利。(由於我的筆電規格限制,這部分的程式碼無法試跑給讀者看)
測試場景:使用者登入流程(驗證帳號 + 查資料庫)整合測試會啟動 Express 路由、模擬 HTTP 請求,甚至連接資料庫(可用測試資料庫)。
// routes/login.js
app.post('/login', async (req, res) => {
const { email, password } = req.body;
const user = await User.findOne({ email });
if (!user || user.password !== password) {
return res.status(401).send('登入失敗');
}
res.send('登入成功');
});
// tests/login.test.js 測試版
const request = require('supertest');
const app = require('../server');
test('登入成功應回傳 200', async () => {
const res = await request(app)
.post('/login')
.send({ email: 'test@example.com', password: '123456' });
expect(res.statusCode).toBe(200);
expect(res.text).toBe('登入成功');
});
- End-to-End Test(端到端測試)
模擬使用者實際操作整個網站或系統。像是打開網頁 → 點選登入 → 成功跳轉到首頁,這整段流程都要測試。

🧪 測試框架簡介:幫你寫測試的工具
• Jest:超受歡迎的 JavaScript 測試框架,適合單元測試,語法簡單。
• Supertest:專門用來測試 API 的工具,可以模擬 HTTP 請求,確認你的 API 有正確回應。
🚀 CI/CD 是什麼?為什麼這麼重要?
CI/CD 是兩個英文縮寫:
• CI(Continuous Integration)持續整合
每次有人 push 程式碼,系統就會自動幫你跑測試、檢查是否有錯。
• CD(Continuous Delivery / Deployment)持續交付 / 部署
如果測試都通過,系統可以自動把程式部署到伺服器上,讓使用者馬上用到最新版本。
這兩個名詞是流程概念,你可以把她想像成自動化生產線。實現這個理念會需要多工具的協作。

簡單來說,CI/CD 就是讓「程式碼 → 測試 → 上線」這整個流程自動化,減少人為錯誤、加快開發速度!
🛠️ GitHub Actions:實作簡易 CI 流程
GitHub Actions 是 GitHub 提供的自動化工具,可以幫你設定:
1. 每次 push 程式碼
2. 自動執行測試(例如用 Jest 跑單元測試)
3. 顯示測試結果(成功 ✅ 或失敗 ❌)
這樣你就不用每次都自己手動跑測試,GitHub 會幫你完成!
🔐 環境變數:機密不會放在程式裡
在 CI/CD 流程中,我們常會用到一些「機密資訊」,像是資料庫密碼、API 金鑰等。這些不會直接寫在程式碼裡,而是放在「環境變數」中,確保安全性。
例如在 GitHub Actions 裡,你可以設定 、 等機密,程式執行時再讀取這些變數。
這篇筆記為你開啟測試與 CI/CD 的一扇小窗 ,未來不管是開發專案、部署網站,這些觀念都超級重要!
參考影片們: