You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
383 lines
11 KiB
383 lines
11 KiB
|
3 months ago
|
// 客服功能综合测试页面
|
||
|
|
|
||
|
|
const socketManager = require('../../utils/websocket');
|
||
|
|
const API = require('../../utils/api');
|
||
|
|
|
||
|
|
Page({
|
||
|
|
data: {
|
||
|
|
// 测试状态
|
||
|
|
testResults: [],
|
||
|
|
currentTest: '',
|
||
|
|
isTesting: false,
|
||
|
|
|
||
|
|
// 用户信息
|
||
|
|
userInfo: null,
|
||
|
|
userType: 'unknown',
|
||
|
|
isAuthenticated: false,
|
||
|
|
|
||
|
|
// WebSocket状态
|
||
|
|
wsConnected: false,
|
||
|
|
wsAuthenticated: false,
|
||
|
|
|
||
|
|
// 测试消息
|
||
|
|
testMessage: '测试消息',
|
||
|
|
receivedMessage: null,
|
||
|
|
|
||
|
|
// 测试模式
|
||
|
|
testMode: 'customer', // customer 或 customer_service
|
||
|
|
|
||
|
|
// 模拟客服ID
|
||
|
|
mockServiceId: 'test_service_001'
|
||
|
|
},
|
||
|
|
|
||
|
|
onLoad: function() {
|
||
|
|
console.log('测试页面加载');
|
||
|
|
this.setData({
|
||
|
|
userInfo: getApp().globalData.userInfo,
|
||
|
|
userType: getApp().globalData.userType
|
||
|
|
});
|
||
|
|
|
||
|
|
// 设置WebSocket事件监听
|
||
|
|
this.setupWebSocketListeners();
|
||
|
|
},
|
||
|
|
|
||
|
|
// 设置WebSocket事件监听
|
||
|
|
setupWebSocketListeners: function() {
|
||
|
|
// 连接状态监听
|
||
|
|
socketManager.on('status', (status) => {
|
||
|
|
console.log('WebSocket状态:', status);
|
||
|
|
this.setData({
|
||
|
|
wsConnected: status.type === 'connected'
|
||
|
|
});
|
||
|
|
this.addTestResult(`WebSocket状态: ${status.type} - ${status.message || ''}`);
|
||
|
|
});
|
||
|
|
|
||
|
|
// 认证状态监听
|
||
|
|
socketManager.on('authenticated', (data) => {
|
||
|
|
console.log('WebSocket认证成功:', data);
|
||
|
|
this.setData({
|
||
|
|
wsAuthenticated: true,
|
||
|
|
isAuthenticated: true
|
||
|
|
});
|
||
|
|
this.addTestResult(`WebSocket认证成功,用户类型: ${data.userType || 'unknown'}`);
|
||
|
|
});
|
||
|
|
|
||
|
|
// 消息接收监听
|
||
|
|
socketManager.on('message', (message) => {
|
||
|
|
console.log('收到WebSocket消息:', message);
|
||
|
|
this.setData({
|
||
|
|
receivedMessage: message
|
||
|
|
});
|
||
|
|
this.addTestResult(`收到消息: ${JSON.stringify(message).substring(0, 100)}...`);
|
||
|
|
});
|
||
|
|
|
||
|
|
// 错误监听
|
||
|
|
socketManager.on('error', (error) => {
|
||
|
|
console.error('WebSocket错误:', error);
|
||
|
|
this.addTestResult(`错误: ${error.message || JSON.stringify(error)}`, true);
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 开始综合测试
|
||
|
|
startTest: function() {
|
||
|
|
if (this.data.isTesting) {
|
||
|
|
wx.showToast({ title: '测试正在进行中', icon: 'none' });
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
this.setData({
|
||
|
|
isTesting: true,
|
||
|
|
testResults: [],
|
||
|
|
currentTest: ''
|
||
|
|
});
|
||
|
|
|
||
|
|
this.addTestResult('===== 开始综合测试 =====');
|
||
|
|
|
||
|
|
// 按顺序执行测试用例
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testUserTypeDetection();
|
||
|
|
}, 500);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试1: 用户类型检测
|
||
|
|
testUserTypeDetection: function() {
|
||
|
|
this.setData({ currentTest: '用户类型检测' });
|
||
|
|
this.addTestResult('测试1: 验证用户类型检测功能');
|
||
|
|
|
||
|
|
const app = getApp();
|
||
|
|
const userType = app.globalData.userType || 'unknown';
|
||
|
|
const storedType = wx.getStorageSync('userType') || 'unknown';
|
||
|
|
|
||
|
|
this.addTestResult(`全局用户类型: ${userType}`);
|
||
|
|
this.addTestResult(`本地存储用户类型: ${storedType}`);
|
||
|
|
|
||
|
|
if (userType === storedType && userType !== 'unknown') {
|
||
|
|
this.addTestResult('✓ 用户类型检测通过');
|
||
|
|
} else {
|
||
|
|
this.addTestResult('✗ 用户类型检测失败', true);
|
||
|
|
}
|
||
|
|
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testWebSocketConnection();
|
||
|
|
}, 1000);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试2: WebSocket连接和认证
|
||
|
|
testWebSocketConnection: function() {
|
||
|
|
this.setData({ currentTest: 'WebSocket连接' });
|
||
|
|
this.addTestResult('测试2: 验证WebSocket连接和认证功能');
|
||
|
|
|
||
|
|
// 检查是否已连接
|
||
|
|
if (socketManager.getConnectionStatus()) {
|
||
|
|
this.addTestResult('✓ WebSocket已连接');
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testAuthentication();
|
||
|
|
}, 500);
|
||
|
|
} else {
|
||
|
|
this.addTestResult('尝试建立WebSocket连接...');
|
||
|
|
// 构建连接URL
|
||
|
|
const app = getApp();
|
||
|
|
const userType = app.globalData.userType || 'customer';
|
||
|
|
const userId = wx.getStorageSync('userId') || `test_${Date.now()}`;
|
||
|
|
|
||
|
|
const wsUrl = `ws://localhost:3003?userId=${userId}&userType=${userType}`;
|
||
|
|
this.addTestResult(`连接URL: ${wsUrl}`);
|
||
|
|
|
||
|
|
socketManager.connect(wsUrl);
|
||
|
|
|
||
|
|
// 等待连接建立
|
||
|
|
setTimeout(() => {
|
||
|
|
if (this.data.wsConnected) {
|
||
|
|
this.addTestResult('✓ WebSocket连接成功');
|
||
|
|
this.testAuthentication();
|
||
|
|
} else {
|
||
|
|
this.addTestResult('✗ WebSocket连接失败', true);
|
||
|
|
this.completeTest();
|
||
|
|
}
|
||
|
|
}, 3000);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试3: 认证功能
|
||
|
|
testAuthentication: function() {
|
||
|
|
this.setData({ currentTest: '认证功能' });
|
||
|
|
this.addTestResult('测试3: 验证WebSocket认证功能');
|
||
|
|
|
||
|
|
if (this.data.wsAuthenticated) {
|
||
|
|
this.addTestResult('✓ WebSocket认证成功');
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testMessageSending();
|
||
|
|
}, 500);
|
||
|
|
} else {
|
||
|
|
this.addTestResult('尝试手动认证...');
|
||
|
|
const app = getApp();
|
||
|
|
const userType = app.globalData.userType || this.data.testMode;
|
||
|
|
const userId = wx.getStorageSync('userId') || `test_${Date.now()}`;
|
||
|
|
|
||
|
|
socketManager.authenticate(userType, userId);
|
||
|
|
|
||
|
|
// 等待认证结果
|
||
|
|
setTimeout(() => {
|
||
|
|
if (this.data.wsAuthenticated) {
|
||
|
|
this.addTestResult('✓ 手动认证成功');
|
||
|
|
this.testMessageSending();
|
||
|
|
} else {
|
||
|
|
this.addTestResult('✗ 认证失败', true);
|
||
|
|
this.completeTest();
|
||
|
|
}
|
||
|
|
}, 2000);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试4: 消息发送功能
|
||
|
|
testMessageSending: function() {
|
||
|
|
this.setData({ currentTest: '消息发送' });
|
||
|
|
this.addTestResult('测试4: 验证消息发送功能');
|
||
|
|
|
||
|
|
const app = getApp();
|
||
|
|
const userType = app.globalData.userType || this.data.testMode;
|
||
|
|
const targetId = userType === 'customer_service' ?
|
||
|
|
`test_customer_${Date.now()}` :
|
||
|
|
this.data.mockServiceId;
|
||
|
|
|
||
|
|
this.addTestResult(`当前用户类型: ${userType}, 目标ID: ${targetId}`);
|
||
|
|
|
||
|
|
const testMessage = {
|
||
|
|
type: 'chat_message',
|
||
|
|
direction: userType === 'customer_service' ? 'service_to_customer' : 'customer_to_service',
|
||
|
|
data: {
|
||
|
|
receiverId: targetId,
|
||
|
|
senderId: wx.getStorageSync('userId') || `test_${Date.now()}`,
|
||
|
|
senderType: userType,
|
||
|
|
content: this.data.testMessage || '测试消息_' + Date.now(),
|
||
|
|
contentType: 1,
|
||
|
|
timestamp: Date.now()
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const sent = socketManager.send(testMessage);
|
||
|
|
if (sent) {
|
||
|
|
this.addTestResult('✓ 消息发送成功');
|
||
|
|
// 等待接收消息(如果有回复)
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testBidirectionalCommunication();
|
||
|
|
}, 3000);
|
||
|
|
} else {
|
||
|
|
this.addTestResult('✗ 消息发送失败', true);
|
||
|
|
this.completeTest();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试5: 双向通信功能
|
||
|
|
testBidirectionalCommunication: function() {
|
||
|
|
this.setData({ currentTest: '双向通信' });
|
||
|
|
this.addTestResult('测试5: 验证双向通信功能');
|
||
|
|
|
||
|
|
if (this.data.receivedMessage) {
|
||
|
|
this.addTestResult('✓ 收到响应消息');
|
||
|
|
this.addTestResult(`消息内容: ${JSON.stringify(this.data.receivedMessage).substring(0, 150)}...`);
|
||
|
|
} else {
|
||
|
|
this.addTestResult('⚠ 未收到响应消息(可能是正常的,取决于服务器配置)');
|
||
|
|
}
|
||
|
|
|
||
|
|
setTimeout(() => {
|
||
|
|
this.testUserTypeSwitching();
|
||
|
|
}, 1000);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 测试6: 用户类型切换
|
||
|
|
testUserTypeSwitching: function() {
|
||
|
|
this.setData({ currentTest: '用户类型切换' });
|
||
|
|
this.addTestResult('测试6: 验证用户类型切换功能');
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 模拟切换用户类型
|
||
|
|
const app = getApp();
|
||
|
|
const originalType = app.globalData.userType;
|
||
|
|
const newType = originalType === 'customer' ? 'customer_service' : 'customer';
|
||
|
|
|
||
|
|
app.globalData.userType = newType;
|
||
|
|
wx.setStorageSync('userType', newType);
|
||
|
|
|
||
|
|
this.addTestResult(`✓ 用户类型切换成功: ${originalType} → ${newType}`);
|
||
|
|
this.addTestResult(`新的全局用户类型: ${app.globalData.userType}`);
|
||
|
|
this.addTestResult(`新的存储用户类型: ${wx.getStorageSync('userType')}`);
|
||
|
|
|
||
|
|
// 恢复原始类型
|
||
|
|
setTimeout(() => {
|
||
|
|
app.globalData.userType = originalType;
|
||
|
|
wx.setStorageSync('userType', originalType);
|
||
|
|
this.addTestResult(`恢复原始用户类型: ${originalType}`);
|
||
|
|
this.completeTest();
|
||
|
|
}, 1000);
|
||
|
|
} catch (error) {
|
||
|
|
this.addTestResult(`✗ 用户类型切换失败: ${error.message}`, true);
|
||
|
|
this.completeTest();
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 完成测试
|
||
|
|
completeTest: function() {
|
||
|
|
this.addTestResult('===== 测试完成 =====');
|
||
|
|
|
||
|
|
// 统计测试结果
|
||
|
|
const results = this.data.testResults;
|
||
|
|
const successCount = results.filter(r => r.includes('✓')).length;
|
||
|
|
const failCount = results.filter(r => r.includes('✗')).length;
|
||
|
|
const warnCount = results.filter(r => r.includes('⚠')).length;
|
||
|
|
|
||
|
|
this.addTestResult(`测试统计: 成功=${successCount}, 失败=${failCount}, 警告=${warnCount}`);
|
||
|
|
|
||
|
|
if (failCount === 0) {
|
||
|
|
this.addTestResult('🎉 所有测试通过!');
|
||
|
|
} else {
|
||
|
|
this.addTestResult('❌ 测试中有失败项,请检查', true);
|
||
|
|
}
|
||
|
|
|
||
|
|
this.setData({
|
||
|
|
isTesting: false,
|
||
|
|
currentTest: '测试完成'
|
||
|
|
});
|
||
|
|
},
|
||
|
|
|
||
|
|
// 添加测试结果
|
||
|
|
addTestResult: function(message, isError = false) {
|
||
|
|
const timestamp = new Date().toLocaleTimeString();
|
||
|
|
const resultItem = {
|
||
|
|
id: Date.now(),
|
||
|
|
time: timestamp,
|
||
|
|
message: message,
|
||
|
|
isError: isError
|
||
|
|
};
|
||
|
|
|
||
|
|
this.setData({
|
||
|
|
testResults: [...this.data.testResults, resultItem]
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log(`[${timestamp}] ${message}`);
|
||
|
|
},
|
||
|
|
|
||
|
|
// 切换测试模式
|
||
|
|
switchTestMode: function() {
|
||
|
|
const newMode = this.data.testMode === 'customer' ? 'customer_service' : 'customer';
|
||
|
|
this.setData({ testMode: newMode });
|
||
|
|
wx.showToast({ title: `已切换到${newMode === 'customer' ? '客户' : '客服'}模式` });
|
||
|
|
},
|
||
|
|
|
||
|
|
// 输入测试消息
|
||
|
|
onInputChange: function(e) {
|
||
|
|
this.setData({ testMessage: e.detail.value });
|
||
|
|
},
|
||
|
|
|
||
|
|
// 清理WebSocket连接
|
||
|
|
cleanup: function() {
|
||
|
|
try {
|
||
|
|
socketManager.close();
|
||
|
|
this.addTestResult('WebSocket连接已关闭');
|
||
|
|
} catch (error) {
|
||
|
|
this.addTestResult(`关闭连接失败: ${error.message}`, true);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
// 手动发送消息
|
||
|
|
sendTestMessage: function() {
|
||
|
|
if (!this.data.testMessage.trim()) {
|
||
|
|
wx.showToast({ title: '请输入测试消息', icon: 'none' });
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
const app = getApp();
|
||
|
|
const userType = app.globalData.userType || this.data.testMode;
|
||
|
|
const targetId = userType === 'customer_service' ?
|
||
|
|
`test_customer_${Date.now()}` :
|
||
|
|
this.data.mockServiceId;
|
||
|
|
|
||
|
|
const message = {
|
||
|
|
type: 'chat_message',
|
||
|
|
direction: userType === 'customer_service' ? 'service_to_customer' : 'customer_to_service',
|
||
|
|
data: {
|
||
|
|
receiverId: targetId,
|
||
|
|
senderId: wx.getStorageSync('userId') || `test_${Date.now()}`,
|
||
|
|
senderType: userType,
|
||
|
|
content: this.data.testMessage.trim(),
|
||
|
|
contentType: 1,
|
||
|
|
timestamp: Date.now()
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const sent = socketManager.send(message);
|
||
|
|
if (sent) {
|
||
|
|
wx.showToast({ title: '消息已发送' });
|
||
|
|
this.addTestResult(`手动发送消息: ${this.data.testMessage}`);
|
||
|
|
} else {
|
||
|
|
wx.showToast({ title: '发送失败', icon: 'none' });
|
||
|
|
this.addTestResult(`手动发送失败`, true);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
|
||
|
|
onUnload: function() {
|
||
|
|
// 清理监听器和连接
|
||
|
|
this.cleanup();
|
||
|
|
}
|
||
|
|
});
|