測試是軟體開發的關鍵部分,可確保您的應用程式能如預期運作。 Jest 是 JavaScript 生態系統中最受歡迎的測試框架之一。 Jest 由 Facebook 開發,以其簡單易用而聞名,使其成為初學者和經驗豐富的開發人員的絕佳選擇。
開始使用 Jest
在我們深入範例之前,讓我們在您的專案中設定 Jest。如果尚未安裝,可以使用 npm 安裝它:
npm install --save-dev jest
接下來,將測試腳本新增至您的 package.json 中:
"scripts": { "test": "jest" }
現在您已經準備好要寫一些測試了!
讓我們建立一個簡單的函數來測試。建立一個名為 math.js 的檔案:
// math.js function add(a, b) { return a b; } module.exports = add;
現在,讓我們為這個函數寫一個測試。建立一個名為 math.test.js 的檔案:
// math.test.js const add = require('./math'); test('adds 1 2 to equal 3', () => { expect(add(1, 2)).toBe(3); });
在這個測試中,我們使用測試函數來定義測試案例。 Expect函數用來斷言add(1, 2)的結果等於3。
運行測試
您可以透過在終端機中執行以下命令來執行測試:
npm test
您應該看到表明您的測試已通過的輸出。
測試非同步程式碼
Jest 也支援測試非同步程式碼。讓我們修改 math.js 檔案以包含非同步函數:
// math.js function fetchData() { return new Promise((resolve) => { setTimeout(() => { resolve('peanut butter'); }, 1000); }); } module.exports = { add, fetchData };
現在,讓我們為 fetchData 寫一個測試:
// math.test.js const { add, fetchData } = require('./math'); test('adds 1 2 to equal 3', () => { expect(add(1, 2)).toBe(3); }); test('fetches data', async () => { const data = await fetchData(); expect(data).toBe('peanut butter'); });
在此測試中,我們將測試函數標記為非同步並使用await 等待promise 解析。
模擬函數
Jest 提供了強大的模擬功能。假設您有一個進行 API 呼叫的函數。您可以模擬此函數以在測試期間控制其行為。
這是一個例子:
// api.js const axios = require('axios'); async function getUser() { const response = await axios.get('https://api.example.com/user'); return response.data; } module.exports = getUser;
您可以在測試中模擬 axios:
// api.test.js const axios = require('axios'); const getUser = require('./api'); jest.mock('axios'); test('fetches user data', async () => { const user = { name: 'John Doe' }; axios.get.mockResolvedValue({ data: user }); const result = await getUser(); expect(result).toEqual(user); });
在此測試中,我們模擬 axios.get 方法以傳回預先定義的回應,從而允許我們在不進行實際 API 呼叫的情況下測試 getUser。
Jest 是一個功能強大的測試框架,可以輕鬆為 JavaScript 應用程式編寫和運行測試。憑藉其簡單的語法、對非同步程式碼的支援以及內建的類比功能,Jest 可以幫助您確保程式碼的可靠性和可維護性。立即開始將 Jest 整合到您的專案中,享受自動化測試的好處。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3