Files
nxxmdata/backend/test-coordinate-edit-flow.js

191 lines
6.7 KiB
JavaScript
Raw Normal View History

2025-08-27 15:36:36 +08:00
/**
* 测试经纬度编辑功能的完整流程
* 验证数据显示和更新的准确性
* @file test-coordinate-edit-flow.js
*/
const { Farm } = require('./models');
const { sequelize } = require('./config/database-simple');
async function testCoordinateEditFlow() {
try {
console.log('开始测试经纬度编辑功能...');
await sequelize.authenticate();
// 1. 创建测试记录
console.log('\n=== 步骤1: 创建测试记录 ===');
const testFarm = await Farm.create({
name: '经纬度编辑测试农场',
type: 'farm',
location: {
lng: 106.2309,
lat: 38.4872
},
address: '宁夏回族自治区银川市',
contact: '测试用户',
phone: '13800138000',
status: 'active'
});
console.log(`✅ 创建成功 - ID: ${testFarm.id}`);
console.log(` 初始经度: ${testFarm.location.lng}`);
console.log(` 初始纬度: ${testFarm.location.lat}`);
// 2. 模拟前端获取数据进行编辑
console.log('\n=== 步骤2: 模拟前端获取编辑数据 ===');
const farmForEdit = await Farm.findByPk(testFarm.id);
// 模拟前端editFarm函数的数据解析
const editFormData = {
id: farmForEdit.id,
name: farmForEdit.name,
address: farmForEdit.address,
contact: farmForEdit.contact,
phone: farmForEdit.phone,
status: farmForEdit.status,
longitude: farmForEdit.location?.lng,
latitude: farmForEdit.location?.lat
};
console.log('前端编辑表单数据:');
console.log(` 经度输入框值: ${editFormData.longitude} (类型: ${typeof editFormData.longitude})`);
console.log(` 纬度输入框值: ${editFormData.latitude} (类型: ${typeof editFormData.latitude})`);
// 验证数据正确性
const isDataCorrect = (
editFormData.longitude === testFarm.location.lng &&
editFormData.latitude === testFarm.location.lat
);
console.log(`数据显示正确性: ${isDataCorrect ? '✅ 正确' : '❌ 错误'}`);
// 3. 模拟用户修改经纬度值
console.log('\n=== 步骤3: 模拟用户修改经纬度值 ===');
const modifiedData = {
...editFormData,
longitude: 106.5507, // 修改经度
latitude: 38.7123 // 修改纬度
};
console.log('用户修改后的值:');
console.log(` 新经度: ${modifiedData.longitude}`);
console.log(` 新纬度: ${modifiedData.latitude}`);
// 4. 模拟后端更新操作
console.log('\n=== 步骤4: 模拟后端更新操作 ===');
// 构建新的location对象模拟updateFarm函数逻辑
const newLocation = {};
if (modifiedData.longitude !== undefined && modifiedData.longitude !== null) {
newLocation.lng = parseFloat(modifiedData.longitude);
}
if (modifiedData.latitude !== undefined && modifiedData.latitude !== null) {
newLocation.lat = parseFloat(modifiedData.latitude);
}
console.log('构建的location对象:', JSON.stringify(newLocation));
// 执行更新
await farmForEdit.update({ location: newLocation });
console.log('✅ 数据库更新完成');
// 5. 验证更新结果
console.log('\n=== 步骤5: 验证更新结果 ===');
const updatedFarm = await Farm.findByPk(testFarm.id);
console.log('更新后的数据库记录:');
console.log(` 经度: ${updatedFarm.location.lng} (类型: ${typeof updatedFarm.location.lng})`);
console.log(` 纬度: ${updatedFarm.location.lat} (类型: ${typeof updatedFarm.location.lat})`);
// 验证更新准确性
const isUpdateCorrect = (
updatedFarm.location.lng === modifiedData.longitude &&
updatedFarm.location.lat === modifiedData.latitude
);
console.log(`更新准确性: ${isUpdateCorrect ? '✅ 正确' : '❌ 错误'}`);
// 6. 模拟再次编辑(验证修改后的值能正确显示)
console.log('\n=== 步骤6: 验证修改后的值能正确显示 ===');
const farmForSecondEdit = await Farm.findByPk(testFarm.id);
const secondEditFormData = {
id: farmForSecondEdit.id,
name: farmForSecondEdit.name,
longitude: farmForSecondEdit.location?.lng,
latitude: farmForSecondEdit.location?.lat
};
console.log('第二次编辑时的表单数据:');
console.log(` 经度输入框值: ${secondEditFormData.longitude}`);
console.log(` 纬度输入框值: ${secondEditFormData.latitude}`);
// 验证显示的是最新修改的值
const isSecondDisplayCorrect = (
secondEditFormData.longitude === modifiedData.longitude &&
secondEditFormData.latitude === modifiedData.latitude
);
console.log(`修改后值显示正确性: ${isSecondDisplayCorrect ? '✅ 正确' : '❌ 错误'}`);
// 7. 测试边界情况
console.log('\n=== 步骤7: 测试边界情况 ===');
// 测试清空经纬度
console.log('测试清空经纬度...');
await farmForSecondEdit.update({
location: {}
});
const farmWithEmptyLocation = await Farm.findByPk(testFarm.id);
const emptyEditFormData = {
longitude: farmWithEmptyLocation.location?.lng,
latitude: farmWithEmptyLocation.location?.lat
};
console.log('清空后的表单数据:');
console.log(` 经度: ${emptyEditFormData.longitude} (${typeof emptyEditFormData.longitude})`);
console.log(` 纬度: ${emptyEditFormData.latitude} (${typeof emptyEditFormData.latitude})`);
// 8. 生成测试报告
console.log('\n=== 测试报告 ===');
const allTestsPassed = isDataCorrect && isUpdateCorrect && isSecondDisplayCorrect;
console.log(`总体结果: ${allTestsPassed ? '✅ 所有测试通过' : '❌ 存在问题'}`);
console.log('详细结果:');
console.log(` - 初始数据显示: ${isDataCorrect ? '✅' : '❌'}`);
console.log(` - 数据更新准确性: ${isUpdateCorrect ? '✅' : '❌'}`);
console.log(` - 修改后值显示: ${isSecondDisplayCorrect ? '✅' : '❌'}`);
// 9. 清理测试数据
console.log('\n=== 清理测试数据 ===');
await testFarm.destroy();
console.log('✅ 测试数据已清理');
return {
success: allTestsPassed,
results: {
initialDisplay: isDataCorrect,
updateAccuracy: isUpdateCorrect,
modifiedDisplay: isSecondDisplayCorrect
}
};
} catch (error) {
console.error('测试失败:', error.message);
if (error.sql) {
console.error('SQL:', error.sql);
}
return { success: false, error: error.message };
} finally {
await sequelize.close();
console.log('\n数据库连接已关闭');
}
}
// 运行测试
if (require.main === module) {
testCoordinateEditFlow();
}
module.exports = { testCoordinateEditFlow };