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