211 lines
6.5 KiB
JavaScript
211 lines
6.5 KiB
JavaScript
|
|
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 };
|