Hướng dẫn cài đặt Jest Testing cho ứng dụng Node.js
Jest là một framework testing phổ biến được Facebook phát triển, giúp việc viết và chạy test cho ứng dụng JavaScript trở nên dễ dàng. Bài viết này sẽ hướng dẫn bạn cài đặt Jest trong dự án Node.js từ đầu.
Điều kiện tiên quyết
- Node.js được cài đặt trên hệ thống của bạn
- Một dự án Node.js hiện có hoặc một dự án mới
Bước 1: Khởi tạo dự án của bạn
Nếu bạn không có dự án hiện tại, hãy tạo một thư mục mới và khởi tạo nó:
mkdir my-node-project
cd my-node-project
npm init -y
Bước 2: Cài đặt Jest
Cài đặt Jest qua lệnh sau:
npm install --save-dev jest
Bước 3: Cấu hình Jest trong package.json
Cập nhật package.json
để thêm cấu hình Jest và tập lệnh kiểm tra:
{
"scripts": {
"test": "jest",
"test:watch": "jest --watch"
},
"jest": {
"testEnvironment": "node",
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"moduleFileExtensions": ["js", "json"],
"testMatch": ["**/__tests__/**/*.js", "**/?(*.)+(spec|test).js"],
"verbose": true
}
}
Bước 4: Tạo một hàm mẫu để kiểm tra
Tạo một tập tin mới có tên là math.js
:
// math.js
function sum(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
module.exports = {
sum,
multiply
};
Bước 5: Viết bài test đầu tiên của bạn
Tạo một tệp thử nghiệm có tên là math.test.js
:
// math.test.js
const { sum, multiply } = require('./math');
describe('Math functions', () => {
test('adds 1 + 2 to equal 3', () => {
expect(sum(1, 2)).toBe(3);
});
test('multiplies 3 * 4 to equal 12', () => {
expect(multiply(3, 4)).toBe(12);
});
});
Bước 6: Cấu hình Jest bổ sung (nếu cần thiết)
Tạo một tệp jest.config.js
để cấu hình chi tiết hơn:
// jest.config.js
module.exports = {
// Automatically clear mock calls and instances between every test
clearMocks: true,
// Indicates whether the coverage information should be collected while executing the test
collectCoverage: true,
// The directory where Jest should output its coverage files
coverageDirectory: "coverage",
// An array of regexp pattern strings used to skip coverage collection
coveragePathIgnorePatterns: [
"/node_modules/"
],
// The test environment that will be used for testing
testEnvironment: "node",
// The glob patterns Jest uses to detect test files
testMatch: [
"**/__tests__/**/*.[jt]s?(x)",
"**/?(*.)+(spec|test).[tj]s?(x)"
]
};
Bước 7: Chạy thử nghiệm
Bây giờ bạn có thể chạy thử nghiệm bằng npm:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run tests with coverage report
npm test -- --coverage
Một số công cụ so khớp Jest thường dùng
Sau đây là một số công cụ so khớp Jest thường được sử dụng:
// Exact equality
expect(value).toBe(2);
// Object matching
expect(data).toEqual({id: 1});
// Truthiness
expect(value).toBeTruthy();
expect(value).toBeFalsy();
// Numbers
expect(value).toBeGreaterThan(3);
expect(value).toBeLessThan(5);
// Strings
expect(string).toMatch(/pattern/);
// Arrays
expect(array).toContain(item);
// Exceptions
expect(() => {
throw new Error('Wrong!');
}).toThrow('Wrong!');
Kiểm tra mã không đồng bộ
Jest xử lý việc kiểm tra mã không đồng bộ một cách khéo léo:
// Testing Promises
test('async test', () => {
return fetchData().then(data => {
expect(data).toBe('data');
});
});
// Using async/await
test('async test with async/await', async () => {
const data = await fetchData();
expect(data).toBe('data');
});
Một số best practices về Jest
- Tổ chức tệp: Giữ các tệp thử nghiệm gần với mã mà chúng đang thử nghiệm
src/
├── math.js
└── __tests__/
└── math.test.js
-
Kiểm tra cô lập: Mỗi bài kiểm tra phải độc lập và không phụ thuộc vào các bài kiểm tra khác
-
Mô tả có ý nghĩa: Sử dụng mô tả bài kiểm tra rõ ràng
describe('User authentication', () => {
test('should successfully log in with valid credentials', () => {
// test code
});
});
- Thiết lập và Tháo dỡ: Sử dụng các phương pháp vòng đời của Jest khi cần thiết
beforeAll(() => {
// Setup before all tests
});
afterEach(() => {
// Cleanup after each test
});
Vậy là bạn đã có môi trường thử nghiệm Jest được cấu hình đầy đủ trong ứng dụng Node.js của mình. Hy vọng bạn thấy thông tin trong bài viết vừa rồi là hữu ích.
All rights reserved