refactor(docs): 简化README结构,更新技术栈和项目结构描述
This commit is contained in:
90
backend/tests/setup.js
Normal file
90
backend/tests/setup.js
Normal file
@@ -0,0 +1,90 @@
|
||||
// 测试环境配置 - 使用SQLite内存数据库进行测试
|
||||
const { Sequelize } = require('sequelize');
|
||||
|
||||
// 设置测试环境变量
|
||||
process.env.NODE_ENV = 'test';
|
||||
|
||||
// 创建测试用的SQLite内存数据库
|
||||
const testSequelize = new Sequelize('sqlite::memory:', {
|
||||
logging: false, // 关闭SQL日志
|
||||
define: {
|
||||
timestamps: true,
|
||||
underscored: false,
|
||||
freezeTableName: false
|
||||
}
|
||||
});
|
||||
|
||||
// 重写数据库配置模块,让测试使用SQLite
|
||||
const originalRequire = require;
|
||||
require = function(id) {
|
||||
if (id === '../src/config/database' || id.endsWith('/config/database')) {
|
||||
return testSequelize;
|
||||
}
|
||||
return originalRequire.apply(this, arguments);
|
||||
};
|
||||
|
||||
// 全局测试设置
|
||||
beforeAll(async () => {
|
||||
try {
|
||||
// 连接测试数据库
|
||||
await testSequelize.authenticate();
|
||||
console.log('测试数据库连接成功');
|
||||
|
||||
// 导入所有模型
|
||||
const User = require('../src/models/User');
|
||||
const Order = require('../src/models/Order');
|
||||
|
||||
// 同步数据库模型(仅在测试环境)
|
||||
await testSequelize.sync({ force: true });
|
||||
console.log('测试数据库同步完成');
|
||||
} catch (error) {
|
||||
console.error('测试数据库连接失败:', error);
|
||||
// 不要直接退出进程,让Jest处理错误
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
|
||||
// 每个测试后清理数据
|
||||
afterEach(async () => {
|
||||
try {
|
||||
// 清理所有表数据,但保留表结构
|
||||
const models = Object.keys(testSequelize.models);
|
||||
for (const modelName of models) {
|
||||
await testSequelize.models[modelName].destroy({
|
||||
where: {},
|
||||
truncate: true,
|
||||
cascade: true,
|
||||
restartIdentity: true
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('清理测试数据失败:', error);
|
||||
}
|
||||
});
|
||||
|
||||
// 测试后清理
|
||||
afterAll(async () => {
|
||||
try {
|
||||
// 关闭数据库连接
|
||||
await testSequelize.close();
|
||||
console.log('测试数据库连接已关闭');
|
||||
} catch (error) {
|
||||
console.error('测试清理失败:', error);
|
||||
}
|
||||
});
|
||||
|
||||
// 设置全局超时
|
||||
jest.setTimeout(30000);
|
||||
|
||||
// 导出测试数据库实例供测试文件使用
|
||||
global.testSequelize = testSequelize;
|
||||
|
||||
// 抑制控制台输出(可选)
|
||||
// global.console = {
|
||||
// ...console,
|
||||
// log: jest.fn(),
|
||||
// debug: jest.fn(),
|
||||
// info: jest.fn(),
|
||||
// warn: jest.fn(),
|
||||
// error: jest.fn(),
|
||||
// };
|
||||
Reference in New Issue
Block a user