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 };
|