Files
nxxmdata/backend/test-coordinate-edit-flow.js
shenquanyi 2bd1d8c032 buider
2025-08-27 15:36:36 +08:00

191 lines
6.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 测试经纬度编辑功能的完整流程
* 验证数据显示和更新的准确性
* @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 };