// 测试修复后的头像上传流程
|
// 这个测试模拟小程序的头像选择和提交流程
|
|
console.log('🧪 开始测试修复后的头像上传流程...\n')
|
|
// 模拟小程序页面数据结构
|
const mockPageData = {
|
localAvatarPath: '', // 本地选择的头像路径
|
formData: {
|
avatarUrl: '',
|
avatarMediaId: ''
|
},
|
avatarUploading: false,
|
avatarUploadProgress: 0,
|
errors: {}
|
}
|
|
// 模拟头像选择函数(修复后的版本)
|
function mockChooseAvatar() {
|
console.log('📸 用户点击选择头像...')
|
|
// 模拟选择了一个头像文件
|
const mockTempFilePath = '/temp/avatar_123.jpg'
|
|
// 只保存本地路径,不立即上传
|
mockPageData.localAvatarPath = mockTempFilePath
|
mockPageData.errors.avatar = false
|
|
console.log('✅ 头像选择成功,本地路径:', mockTempFilePath)
|
console.log('💡 提示:头像已选择,提交时将自动上传')
|
console.log('📊 当前状态:', {
|
localAvatarPath: mockPageData.localAvatarPath,
|
avatarUrl: mockPageData.formData.avatarUrl,
|
avatarMediaId: mockPageData.formData.avatarMediaId
|
})
|
console.log('')
|
}
|
|
// 模拟头像删除函数(修复后的版本)
|
function mockDeleteAvatar() {
|
console.log('🗑️ 用户点击删除头像...')
|
|
const hasLocalAvatar = !!mockPageData.localAvatarPath
|
const hasUploadedAvatar = !!mockPageData.formData.avatarUrl
|
|
if (hasLocalAvatar) {
|
console.log('📱 删除本地选择的头像')
|
mockPageData.localAvatarPath = ''
|
console.log('✅ 本地头像已删除')
|
} else if (hasUploadedAvatar) {
|
console.log('☁️ 删除服务器上的头像')
|
mockPageData.formData.avatarUrl = ''
|
mockPageData.formData.avatarMediaId = ''
|
console.log('✅ 服务器头像已删除')
|
}
|
|
console.log('📊 删除后状态:', {
|
localAvatarPath: mockPageData.localAvatarPath,
|
avatarUrl: mockPageData.formData.avatarUrl,
|
avatarMediaId: mockPageData.formData.avatarMediaId
|
})
|
console.log('')
|
}
|
|
// 模拟头像验证函数(修复后的版本)
|
function mockValidateAvatar(requireAvatar = true) {
|
console.log('🔍 验证头像...')
|
|
if (requireAvatar) {
|
const hasAvatar = mockPageData.localAvatarPath ||
|
(mockPageData.formData.avatarUrl && mockPageData.formData.avatarMediaId)
|
|
if (!hasAvatar) {
|
mockPageData.errors.avatar = '请选择头像'
|
console.log('❌ 验证失败:请选择头像')
|
return false
|
}
|
}
|
|
console.log('✅ 头像验证通过')
|
return true
|
}
|
|
// 模拟提交前上传头像函数(新增的功能)
|
async function mockUploadAvatarBeforeSubmit() {
|
if (!mockPageData.localAvatarPath) {
|
console.log('💡 无需上传头像(没有本地选择的头像)')
|
return
|
}
|
|
console.log('☁️ 开始上传头像到服务器...')
|
console.log('📁 本地文件路径:', mockPageData.localAvatarPath)
|
|
// 模拟上传进度
|
mockPageData.avatarUploading = true
|
for (let progress = 0; progress <= 100; progress += 25) {
|
mockPageData.avatarUploadProgress = progress
|
console.log(`📈 上传进度: ${progress}%`)
|
await new Promise(resolve => setTimeout(resolve, 200)) // 模拟延迟
|
}
|
|
// 模拟上传成功
|
const mockUploadResult = {
|
url: 'https://example.com/avatars/avatar_123.jpg',
|
key: 'avatars/avatar_123.jpg'
|
}
|
|
mockPageData.formData.avatarUrl = mockUploadResult.url
|
mockPageData.formData.avatarMediaId = mockUploadResult.key
|
mockPageData.localAvatarPath = '' // 清空本地路径
|
mockPageData.avatarUploading = false
|
mockPageData.avatarUploadProgress = 0
|
|
console.log('✅ 头像上传成功!')
|
console.log('🔗 头像URL:', mockUploadResult.url)
|
console.log('🔑 Media ID:', mockUploadResult.key)
|
console.log('')
|
}
|
|
// 模拟表单提交函数(修复后的版本)
|
async function mockSubmitForm() {
|
console.log('📝 开始提交表单...')
|
|
// 1. 验证表单(包括头像)
|
if (!mockValidateAvatar(true)) {
|
console.log('❌ 表单验证失败,停止提交')
|
return false
|
}
|
|
// 2. 如果有本地头像,先上传头像
|
await mockUploadAvatarBeforeSubmit()
|
|
// 3. 准备提交数据
|
const submitData = {
|
playerInfo: {
|
avatarMediaId: mockPageData.formData.avatarMediaId
|
}
|
// ... 其他表单数据
|
}
|
|
console.log('📤 提交数据:', submitData)
|
console.log('✅ 表单提交成功!')
|
return true
|
}
|
|
// 运行测试
|
async function runTests() {
|
console.log('='.repeat(60))
|
console.log('测试场景 1: 选择头像 -> 提交')
|
console.log('='.repeat(60))
|
|
// 重置状态
|
mockPageData.localAvatarPath = ''
|
mockPageData.formData.avatarUrl = ''
|
mockPageData.formData.avatarMediaId = ''
|
|
mockChooseAvatar()
|
await mockSubmitForm()
|
|
console.log('\n' + '='.repeat(60))
|
console.log('测试场景 2: 选择头像 -> 删除 -> 重新选择 -> 提交')
|
console.log('='.repeat(60))
|
|
// 重置状态
|
mockPageData.localAvatarPath = ''
|
mockPageData.formData.avatarUrl = ''
|
mockPageData.formData.avatarMediaId = ''
|
|
mockChooseAvatar()
|
mockDeleteAvatar()
|
mockChooseAvatar()
|
await mockSubmitForm()
|
|
console.log('\n' + '='.repeat(60))
|
console.log('测试场景 3: 未选择头像直接提交(应该失败)')
|
console.log('='.repeat(60))
|
|
// 重置状态
|
mockPageData.localAvatarPath = ''
|
mockPageData.formData.avatarUrl = ''
|
mockPageData.formData.avatarMediaId = ''
|
|
await mockSubmitForm()
|
|
console.log('\n' + '='.repeat(60))
|
console.log('🎉 所有测试完成!')
|
console.log('='.repeat(60))
|
|
console.log('\n📋 修复总结:')
|
console.log('✅ 1. 头像选择时不再立即上传,只做本地预览')
|
console.log('✅ 2. 提交表单时才上传头像到服务器')
|
console.log('✅ 3. 支持删除本地选择的头像')
|
console.log('✅ 4. 表单验证支持本地选择的头像')
|
console.log('✅ 5. 上传进度显示正常')
|
}
|
|
// 运行测试
|
runTests().catch(console.error)
|