You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.7 KiB
129 lines
4.7 KiB
#!/usr/bin/env node
|
|
|
|
/**
|
|
* 用户资料系统测试脚本
|
|
* 用于验证系统功能是否正常
|
|
*/
|
|
|
|
import { execSync } from 'child_process';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
console.log('🧪 开始测试用户资料系统...\n');
|
|
|
|
// 检查必要的文件是否存在
|
|
const requiredFiles = [
|
|
'src/controllers/Page/PageController.js',
|
|
'src/views/page/profile/index.pug',
|
|
'public/js/profile.js',
|
|
'src/db/migrations/20250901000000_add_profile_fields.mjs'
|
|
];
|
|
|
|
console.log('📁 检查必要文件...');
|
|
let allFilesExist = true;
|
|
|
|
requiredFiles.forEach(file => {
|
|
if (fs.existsSync(file)) {
|
|
console.log(`✅ ${file}`);
|
|
} else {
|
|
console.log(`❌ ${file} - 文件不存在`);
|
|
allFilesExist = false;
|
|
}
|
|
});
|
|
|
|
if (!allFilesExist) {
|
|
console.log('\n❌ 部分必要文件缺失,请检查文件创建');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log('\n✅ 所有必要文件都存在');
|
|
|
|
// 检查数据库迁移文件
|
|
console.log('\n🗄️ 检查数据库迁移...');
|
|
try {
|
|
const migrationContent = fs.readFileSync('src/db/migrations/20250901000000_add_profile_fields.mjs', 'utf8');
|
|
if (migrationContent.includes('name') && migrationContent.includes('bio') && migrationContent.includes('avatar')) {
|
|
console.log('✅ 数据库迁移文件包含必要字段');
|
|
} else {
|
|
console.log('❌ 数据库迁移文件缺少必要字段');
|
|
}
|
|
} catch (error) {
|
|
console.log('❌ 无法读取数据库迁移文件');
|
|
}
|
|
|
|
// 检查路由配置
|
|
console.log('\n🛣️ 检查路由配置...');
|
|
try {
|
|
const controllerContent = fs.readFileSync('src/controllers/Page/PageController.js', 'utf8');
|
|
|
|
const hasProfileGet = controllerContent.includes('profileGet');
|
|
const hasProfileUpdate = controllerContent.includes('profileUpdate');
|
|
const hasChangePassword = controllerContent.includes('changePassword');
|
|
const hasProfileRoutes = controllerContent.includes('/profile/update') && controllerContent.includes('/profile/change-password');
|
|
|
|
if (hasProfileGet && hasProfileUpdate && hasChangePassword && hasProfileRoutes) {
|
|
console.log('✅ 控制器方法已实现');
|
|
console.log('✅ 路由配置已添加');
|
|
} else {
|
|
console.log('❌ 控制器方法或路由配置不完整');
|
|
}
|
|
} catch (error) {
|
|
console.log('❌ 无法读取控制器文件');
|
|
}
|
|
|
|
// 检查前端模板
|
|
console.log('\n🎨 检查前端模板...');
|
|
try {
|
|
const templateContent = fs.readFileSync('src/views/page/profile/index.pug', 'utf8');
|
|
|
|
const hasProfileForm = templateContent.includes('profileForm');
|
|
const hasPasswordForm = templateContent.includes('passwordForm');
|
|
const hasUserFields = templateContent.includes('username') && templateContent.includes('email') && templateContent.includes('name');
|
|
const hasInlineStyles = templateContent.includes('style.') && templateContent.includes('.profile-container');
|
|
|
|
if (hasProfileForm && hasPasswordForm && hasUserFields && hasInlineStyles) {
|
|
console.log('✅ 前端模板包含必要表单和样式');
|
|
} else {
|
|
console.log('❌ 前端模板缺少必要元素');
|
|
}
|
|
} catch (error) {
|
|
console.log('❌ 无法读取前端模板文件');
|
|
}
|
|
|
|
// 检查JavaScript功能
|
|
console.log('\n⚡ 检查JavaScript功能...');
|
|
try {
|
|
const jsContent = fs.readFileSync('public/js/profile.js', 'utf8');
|
|
|
|
const hasProfileUpdate = jsContent.includes('handleProfileUpdate');
|
|
const hasPasswordChange = jsContent.includes('handlePasswordChange');
|
|
const hasValidation = jsContent.includes('validateField');
|
|
const hasIIFE = jsContent.includes('(function()') && jsContent.includes('})();');
|
|
|
|
if (hasProfileUpdate && hasPasswordChange && hasValidation && hasIIFE) {
|
|
console.log('✅ JavaScript文件包含必要功能,使用IIFE模式');
|
|
} else {
|
|
console.log('❌ JavaScript文件缺少必要功能');
|
|
}
|
|
} catch (error) {
|
|
console.log('❌ 无法读取JavaScript文件');
|
|
}
|
|
|
|
console.log('\n📋 测试完成!');
|
|
console.log('\n📝 下一步操作:');
|
|
console.log('1. 运行数据库迁移: npm run migrate');
|
|
console.log('2. 启动应用: npm start');
|
|
console.log('3. 访问 /profile 页面测试功能');
|
|
console.log('4. 确保用户已登录才能访问资料页面');
|
|
|
|
console.log('\n🔧 如果遇到问题:');
|
|
console.log('- 检查数据库连接');
|
|
console.log('- 确认用户表结构正确');
|
|
console.log('- 查看浏览器控制台错误信息');
|
|
console.log('- 检查服务器日志');
|
|
|
|
console.log('\n✨ 重构完成:');
|
|
console.log('- 样式已内联到Pug模板中');
|
|
console.log('- JavaScript使用IIFE模式,避免全局污染');
|
|
console.log('- 界面设计更简洁,与项目风格保持一致');
|
|
console.log('- 代码结构更清晰,易于维护');
|
|
|