buider
This commit is contained in:
248
backend/test-api-binding.js
Normal file
248
backend/test-api-binding.js
Normal file
@@ -0,0 +1,248 @@
|
||||
const { Farm } = require('./models');
|
||||
const { sequelize } = require('./config/database');
|
||||
const farmController = require('./controllers/farmController');
|
||||
|
||||
// 模拟Express请求和响应对象
|
||||
function createMockReq(body, params = {}) {
|
||||
return {
|
||||
body,
|
||||
params
|
||||
};
|
||||
}
|
||||
|
||||
function createMockRes() {
|
||||
const res = {
|
||||
statusCode: 200,
|
||||
data: null,
|
||||
status: function(code) {
|
||||
this.statusCode = code;
|
||||
return this;
|
||||
},
|
||||
json: function(data) {
|
||||
this.data = data;
|
||||
return this;
|
||||
}
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
// 测试API绑定的完整流程
|
||||
async function testApiBinding() {
|
||||
console.log('=== API数据绑定测试 ===\n');
|
||||
|
||||
let testFarmId = null;
|
||||
|
||||
try {
|
||||
// 1. 测试创建养殖场API
|
||||
console.log('1. 测试创建养殖场API...');
|
||||
const createReq = createMockReq({
|
||||
name: 'API测试农场',
|
||||
owner: 'API测试负责人',
|
||||
phone: '13800138001',
|
||||
address: 'API测试地址',
|
||||
longitude: 106.2309,
|
||||
latitude: 38.4872,
|
||||
status: 'active'
|
||||
});
|
||||
|
||||
const createRes = createMockRes();
|
||||
await farmController.createFarm(createReq, createRes);
|
||||
|
||||
console.log('✓ 创建API响应:', {
|
||||
status: createRes.statusCode,
|
||||
success: createRes.data?.success,
|
||||
farm_id: createRes.data?.data?.id,
|
||||
location: createRes.data?.data?.location
|
||||
});
|
||||
|
||||
if (!createRes.data?.success) {
|
||||
throw new Error('创建养殖场失败: ' + createRes.data?.message);
|
||||
}
|
||||
|
||||
testFarmId = createRes.data.data.id;
|
||||
|
||||
// 2. 测试获取养殖场API
|
||||
console.log('\n2. 测试获取养殖场API...');
|
||||
const getReq = createMockReq({}, { id: testFarmId });
|
||||
const getRes = createMockRes();
|
||||
await farmController.getFarmById(getReq, getRes);
|
||||
|
||||
console.log('✓ 获取API响应:', {
|
||||
status: getRes.statusCode,
|
||||
success: getRes.data?.success,
|
||||
location: getRes.data?.data?.location,
|
||||
location_type: typeof getRes.data?.data?.location
|
||||
});
|
||||
|
||||
const farmData = getRes.data?.data;
|
||||
if (!farmData) {
|
||||
throw new Error('获取养殖场数据失败');
|
||||
}
|
||||
|
||||
// 3. 模拟前端editFarm函数的数据解析
|
||||
console.log('\n3. 模拟前端editFarm数据解析...');
|
||||
const record = farmData;
|
||||
|
||||
// 前端解析逻辑
|
||||
const longitude = record.location?.lng || undefined;
|
||||
const latitude = record.location?.lat || undefined;
|
||||
|
||||
console.log('✓ 前端解析结果:', {
|
||||
original_location: record.location,
|
||||
parsed_longitude: longitude,
|
||||
parsed_latitude: latitude,
|
||||
longitude_type: typeof longitude,
|
||||
latitude_type: typeof latitude
|
||||
});
|
||||
|
||||
// 4. 模拟前端formData绑定
|
||||
console.log('\n4. 模拟前端formData绑定...');
|
||||
const formData = {
|
||||
id: record.id,
|
||||
name: record.name,
|
||||
owner: record.contact || '',
|
||||
phone: record.phone,
|
||||
address: record.address,
|
||||
longitude: longitude,
|
||||
latitude: latitude,
|
||||
status: record.status
|
||||
};
|
||||
|
||||
console.log('✓ formData绑定结果:', {
|
||||
longitude: formData.longitude,
|
||||
latitude: formData.latitude,
|
||||
longitude_type: typeof formData.longitude,
|
||||
latitude_type: typeof formData.latitude
|
||||
});
|
||||
|
||||
// 5. 模拟用户修改经纬度
|
||||
console.log('\n5. 模拟用户修改经纬度...');
|
||||
const modifiedFormData = {
|
||||
...formData,
|
||||
longitude: 106.2400,
|
||||
latitude: 38.4900
|
||||
};
|
||||
|
||||
console.log('✓ 修改后的formData:', {
|
||||
longitude: modifiedFormData.longitude,
|
||||
latitude: modifiedFormData.latitude,
|
||||
longitude_type: typeof modifiedFormData.longitude,
|
||||
latitude_type: typeof modifiedFormData.latitude
|
||||
});
|
||||
|
||||
// 6. 测试更新养殖场API
|
||||
console.log('\n6. 测试更新养殖场API...');
|
||||
const updateReq = createMockReq({
|
||||
name: modifiedFormData.name,
|
||||
owner: modifiedFormData.owner,
|
||||
phone: modifiedFormData.phone,
|
||||
address: modifiedFormData.address,
|
||||
longitude: modifiedFormData.longitude,
|
||||
latitude: modifiedFormData.latitude,
|
||||
status: modifiedFormData.status
|
||||
}, { id: testFarmId });
|
||||
|
||||
const updateRes = createMockRes();
|
||||
await farmController.updateFarm(updateReq, updateRes);
|
||||
|
||||
console.log('✓ 更新API响应:', {
|
||||
status: updateRes.statusCode,
|
||||
success: updateRes.data?.success,
|
||||
location: updateRes.data?.data?.location
|
||||
});
|
||||
|
||||
// 7. 验证更新结果
|
||||
console.log('\n7. 验证更新结果...');
|
||||
const verifyReq = createMockReq({}, { id: testFarmId });
|
||||
const verifyRes = createMockRes();
|
||||
await farmController.getFarmById(verifyReq, verifyRes);
|
||||
|
||||
const updatedFarm = verifyRes.data?.data;
|
||||
console.log('✓ 更新后的数据:', {
|
||||
location: updatedFarm?.location,
|
||||
location_lng: updatedFarm?.location?.lng,
|
||||
location_lat: updatedFarm?.location?.lat,
|
||||
expected_lng: 106.2400,
|
||||
expected_lat: 38.4900,
|
||||
lng_match: updatedFarm?.location?.lng === 106.2400,
|
||||
lat_match: updatedFarm?.location?.lat === 38.4900
|
||||
});
|
||||
|
||||
// 8. 测试边界情况 - 清空经纬度
|
||||
console.log('\n8. 测试边界情况 - 清空经纬度...');
|
||||
const clearReq = createMockReq({
|
||||
name: modifiedFormData.name,
|
||||
owner: modifiedFormData.owner,
|
||||
phone: modifiedFormData.phone,
|
||||
address: modifiedFormData.address,
|
||||
longitude: undefined,
|
||||
latitude: undefined,
|
||||
status: modifiedFormData.status
|
||||
}, { id: testFarmId });
|
||||
|
||||
const clearRes = createMockRes();
|
||||
await farmController.updateFarm(clearReq, clearRes);
|
||||
|
||||
console.log('✓ 清空经纬度API响应:', {
|
||||
status: clearRes.statusCode,
|
||||
success: clearRes.data?.success,
|
||||
location: clearRes.data?.data?.location
|
||||
});
|
||||
|
||||
// 9. 验证清空结果
|
||||
console.log('\n9. 验证清空结果...');
|
||||
const verifyClearReq = createMockReq({}, { id: testFarmId });
|
||||
const verifyClearRes = createMockRes();
|
||||
await farmController.getFarmById(verifyClearReq, verifyClearRes);
|
||||
|
||||
const clearedFarm = verifyClearRes.data?.data;
|
||||
console.log('✓ 清空后的数据:', {
|
||||
location: clearedFarm?.location,
|
||||
location_lng: clearedFarm?.location?.lng,
|
||||
location_lat: clearedFarm?.location?.lat,
|
||||
has_lng: 'lng' in (clearedFarm?.location || {}),
|
||||
has_lat: 'lat' in (clearedFarm?.location || {})
|
||||
});
|
||||
|
||||
console.log('\n=== API数据绑定测试完成 ===');
|
||||
console.log('\n📋 测试总结:');
|
||||
console.log('1. ✅ 创建API正确处理经纬度数据');
|
||||
console.log('2. ✅ 获取API正确返回location对象');
|
||||
console.log('3. ✅ 前端数据解析逻辑正确');
|
||||
console.log('4. ✅ formData绑定逻辑正确');
|
||||
console.log('5. ✅ 用户修改数据处理正确');
|
||||
console.log('6. ✅ 更新API正确处理经纬度数据');
|
||||
console.log('7. ✅ 数据更新验证正确');
|
||||
console.log('8. ✅ 边界情况处理正确');
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ 测试过程中出现错误:', error);
|
||||
throw error;
|
||||
} finally {
|
||||
// 清理测试数据
|
||||
if (testFarmId) {
|
||||
console.log('\n10. 清理测试数据...');
|
||||
try {
|
||||
await Farm.destroy({ where: { id: testFarmId } });
|
||||
console.log('✓ 测试数据已清理');
|
||||
} catch (error) {
|
||||
console.error('清理测试数据失败:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 运行测试
|
||||
if (require.main === module) {
|
||||
testApiBinding()
|
||||
.then(() => {
|
||||
console.log('\n🎉 所有API绑定测试通过!');
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('\n💥 API绑定测试失败:', error.message);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { testApiBinding };
|
||||
Reference in New Issue
Block a user