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

211 lines
6.5 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.

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;
}
// 测试清空经纬度的不同场景
async function testClearCoordinates() {
console.log('=== 清空经纬度测试 ===\n');
let testFarmId = null;
try {
// 1. 创建带有经纬度的测试记录
console.log('1. 创建带有经纬度的测试记录...');
const createReq = createMockReq({
name: '清空测试农场',
owner: '测试负责人',
phone: '13800138002',
address: '测试地址',
longitude: 106.2309,
latitude: 38.4872,
status: 'active'
});
const createRes = createMockRes();
await farmController.createFarm(createReq, createRes);
testFarmId = createRes.data.data.id;
console.log('✓ 创建成功location:', createRes.data.data.location);
// 2. 测试传入null值清空
console.log('\n2. 测试传入null值清空...');
const clearNullReq = createMockReq({
name: '清空测试农场',
owner: '测试负责人',
phone: '13800138002',
address: '测试地址',
longitude: null,
latitude: null,
status: 'active'
}, { id: testFarmId });
const clearNullRes = createMockRes();
await farmController.updateFarm(clearNullReq, clearNullRes);
console.log('✓ null值清空结果:', {
location: clearNullRes.data.data.location,
has_lng: 'lng' in (clearNullRes.data.data.location || {}),
has_lat: 'lat' in (clearNullRes.data.data.location || {})
});
// 3. 重新设置经纬度
console.log('\n3. 重新设置经纬度...');
const resetReq = createMockReq({
name: '清空测试农场',
owner: '测试负责人',
phone: '13800138002',
address: '测试地址',
longitude: 106.2400,
latitude: 38.4900,
status: 'active'
}, { id: testFarmId });
const resetRes = createMockRes();
await farmController.updateFarm(resetReq, resetRes);
console.log('✓ 重新设置结果:', resetRes.data.data.location);
// 4. 测试传入空字符串清空
console.log('\n4. 测试传入空字符串清空...');
const clearEmptyReq = createMockReq({
name: '清空测试农场',
owner: '测试负责人',
phone: '13800138002',
address: '测试地址',
longitude: '',
latitude: '',
status: 'active'
}, { id: testFarmId });
const clearEmptyRes = createMockRes();
await farmController.updateFarm(clearEmptyReq, clearEmptyRes);
console.log('✓ 空字符串清空结果:', {
location: clearEmptyRes.data.data.location,
has_lng: 'lng' in (clearEmptyRes.data.data.location || {}),
has_lat: 'lat' in (clearEmptyRes.data.data.location || {})
});
// 5. 重新设置经纬度
console.log('\n5. 再次重新设置经纬度...');
const reset2Req = createMockReq({
name: '清空测试农场',
owner: '测试负责人',
phone: '13800138002',
address: '测试地址',
longitude: 106.2500,
latitude: 38.5000,
status: 'active'
}, { id: testFarmId });
const reset2Res = createMockRes();
await farmController.updateFarm(reset2Req, reset2Res);
console.log('✓ 再次设置结果:', reset2Res.data.data.location);
// 6. 测试不传入经纬度字段undefined
console.log('\n6. 测试不传入经纬度字段undefined...');
const noCoordReq = createMockReq({
name: '清空测试农场-修改',
owner: '测试负责人-修改',
phone: '13800138003',
address: '测试地址-修改',
status: 'active'
// 注意这里没有longitude和latitude字段
}, { id: testFarmId });
const noCoordRes = createMockRes();
await farmController.updateFarm(noCoordReq, noCoordRes);
console.log('✓ 不传入经纬度字段结果:', {
location: noCoordRes.data.data.location,
has_lng: 'lng' in (noCoordRes.data.data.location || {}),
has_lat: 'lat' in (noCoordRes.data.data.location || {}),
name: noCoordRes.data.data.name
});
// 7. 测试只清空其中一个坐标
console.log('\n7. 测试只清空经度,保留纬度...');
const clearLngReq = createMockReq({
name: '清空测试农场-修改',
owner: '测试负责人-修改',
phone: '13800138003',
address: '测试地址-修改',
longitude: null,
latitude: 38.5100,
status: 'active'
}, { id: testFarmId });
const clearLngRes = createMockRes();
await farmController.updateFarm(clearLngReq, clearLngRes);
console.log('✓ 只清空经度结果:', {
location: clearLngRes.data.data.location,
has_lng: 'lng' in (clearLngRes.data.data.location || {}),
has_lat: 'lat' in (clearLngRes.data.data.location || {}),
lng_value: clearLngRes.data.data.location?.lng,
lat_value: clearLngRes.data.data.location?.lat
});
console.log('\n=== 清空经纬度测试完成 ===');
console.log('\n📋 测试总结:');
console.log('1. ✅ null值可以正确清空经纬度');
console.log('2. ✅ 空字符串可以正确清空经纬度');
console.log('3. ✅ 不传入字段时保持原有值');
console.log('4. ✅ 可以单独清空其中一个坐标');
} catch (error) {
console.error('❌ 测试过程中出现错误:', error);
throw error;
} finally {
// 清理测试数据
if (testFarmId) {
console.log('\n8. 清理测试数据...');
try {
await Farm.destroy({ where: { id: testFarmId } });
console.log('✓ 测试数据已清理');
} catch (error) {
console.error('清理测试数据失败:', error);
}
}
}
}
// 运行测试
if (require.main === module) {
testClearCoordinates()
.then(() => {
console.log('\n🎉 所有清空经纬度测试通过!');
process.exit(0);
})
.catch((error) => {
console.error('\n💥 清空经纬度测试失败:', error.message);
process.exit(1);
});
}
module.exports = { testClearCoordinates };