Files
pos-system/services/_template/src/__tests__/setupTests.ts
Ho Ngoc Hai ab44954bd6 Update project configuration and enhance service template with new features
- Updated `.gitignore` to clarify environment variable handling.
- Enhanced `pnpm-lock.yaml` with new dependencies for Jest and Supertest, including type definitions.
- Improved bilingual documentation in `SKILL.md` files for better clarity on comment patterns and project rules.
- Refined `docker-compose.yml` for local development, adding detailed instructions and access points.
- Updated environment variable example in `env.local.example` for better guidance on configuration.
- Removed outdated architecture documentation from the service template.
- Enhanced Dockerfile for improved security and performance during builds.
- Added Swagger documentation setup in the service template for better API documentation.
- Improved error handling and logging middleware for enhanced debugging capabilities.
2025-12-27 13:54:09 +07:00

158 lines
4.4 KiB
TypeScript

import { jest } from '@jest/globals';
// EN: Extend global types for test utilities
// VI: Mở rộng global types cho test utilities
declare global {
var testUtils: {
createMockReq: (overrides?: any) => any;
createMockRes: () => any;
createMockNext: () => jest.Mock;
};
}
// EN: Mock environment variables for tests
// VI: Mock biến môi trường cho tests
process.env.NODE_ENV = 'test';
process.env.DATABASE_URL = 'postgresql://test:test@localhost:5432/test_db';
process.env.REDIS_URL = 'redis://localhost:6379/1';
process.env.PORT = '3001';
process.env.SERVICE_NAME = 'test-service';
process.env.API_VERSION = 'v1';
// EN: Mock external services to avoid real network calls
// VI: Mock các service bên ngoài để tránh gọi mạng thật
jest.mock('@goodgo/logger', () => ({
logger: {
info: jest.fn(),
error: jest.fn(),
warn: jest.fn(),
debug: jest.fn(),
},
}));
// EN: Auth SDK mocking is handled in individual test files
// VI: Auth SDK mocking được xử lý trong từng test file riêng biệt
jest.mock('@goodgo/tracing', () => ({
initTracing: jest.fn(),
}));
// EN: Mock database client to avoid real DB connections in unit tests
// VI: Mock database client để tránh kết nối DB thật trong unit tests
jest.mock('../config/database.config', () => ({
connectDatabase: jest.fn(),
prisma: {
$queryRaw: jest.fn(),
$disconnect: jest.fn(),
$connect: jest.fn(),
feature: {
create: jest.fn(),
findMany: jest.fn(),
findUnique: jest.fn(),
update: jest.fn(),
delete: jest.fn(),
},
},
}));
// EN: Set up default mock implementations
// VI: Thiết lập implementations mock mặc định
const { prisma } = require('../config/database.config');
// EN: Mock successful feature creation
// VI: Mock việc tạo feature thành công
prisma.feature.create.mockResolvedValue({
id: 'test-feature-id',
name: 'test-feature',
title: 'Test Feature',
description: 'Test description',
config: {},
enabled: true,
version: '1.0.0',
tags: [],
createdAt: new Date(),
updatedAt: new Date(),
});
// EN: Mock successful feature queries
// VI: Mock việc query feature thành công
prisma.feature.findMany.mockResolvedValue([]);
prisma.feature.findUnique.mockResolvedValue(null);
prisma.feature.update.mockResolvedValue({
id: 'test-feature-id',
name: 'test-feature',
title: 'Updated Feature',
description: 'Updated description',
config: {},
enabled: true,
version: '1.0.0',
tags: [],
createdAt: new Date(),
updatedAt: new Date(),
});
prisma.feature.delete.mockResolvedValue({});
// EN: Mock Redis client to avoid real Redis connections
// VI: Mock Redis client để tránh kết nối Redis thật
jest.mock('../config/redis.config', () => ({
getRedisClient: jest.fn().mockReturnValue({
call: jest.fn(),
connect: jest.fn(),
disconnect: jest.fn(),
}),
}));
// EN: Mock Prometheus registry to avoid global state issues in tests
// VI: Mock Prometheus registry để tránh vấn đề global state trong tests
jest.mock('prom-client', () => {
const mockRegistry = {
registerMetric: jest.fn(),
getMetricsAsJSON: jest.fn().mockReturnValue({}),
metrics: jest.fn().mockReturnValue(''),
};
return {
Registry: jest.fn().mockImplementation(() => mockRegistry),
register: mockRegistry,
collectDefaultMetrics: jest.fn(),
Gauge: jest.fn().mockImplementation(() => ({
set: jest.fn(),
inc: jest.fn(),
dec: jest.fn(),
})),
Counter: jest.fn().mockImplementation(() => ({
inc: jest.fn(),
add: jest.fn(),
})),
Histogram: jest.fn().mockImplementation(() => ({
observe: jest.fn(),
startTimer: jest.fn().mockReturnValue(jest.fn()),
})),
};
});
// EN: Global test utilities
// VI: Utilities test toàn cục
global.testUtils = {
// EN: Helper to create mock request/response objects
// VI: Helper để tạo mock request/response objects
createMockReq: (overrides = {}) => ({
body: {},
params: {},
query: {},
headers: {},
...overrides,
}),
createMockRes: () => {
const res: any = {};
res.status = jest.fn().mockReturnValue(res);
res.json = jest.fn().mockReturnValue(res);
res.send = jest.fn().mockReturnValue(res);
return res;
},
// EN: Helper to create mock next function
// VI: Helper để tạo mock next function
createMockNext: () => jest.fn(),
};