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