From 3e8b9431c798d3726d15e74845a2f8685f4bc3f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Thu, 30 Apr 2026 15:53:38 +0800 Subject: [PATCH] =?UTF-8?q?docs(testing):=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=BF=9B=E5=BA=A6=E8=B7=9F=E8=B8=AA=E5=92=8Cbug?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 BUG_TRACKER.md 记录已修复和开放的 bug 问题 - 添加 TEST_PROGRESS.md 跟踪各模块测试覆盖率和验证状态 - 修复 RN Chat Demo Jest 配置以支持本地 SDK 源码解析 - 修复 Python Server SDK 回调消息解析和顶层导出问题 - 修复 Vue3 SDK package exports 条件顺序警告 - 完善 im-service 时间字段单位一致性处理 - 优化 RN SDK 历史消息 upsert 逻辑避免回推状态丢失 - 增强 Android 黑名单操作错误处理和 UI 反馈 - 实现 im-service AppSecret 鉴权和 HMAC 签名验证 - 添加 IM Token 过期时间和自动续签机制 - 修复 RN SDK 草稿同步避免多设备数据污染 - 优化 Vue3 SDK 撤回编辑操作的本地状态更新 - 完善 im-service 消息摘要媒体类型占位文本显示 --- jest.config.js | 10 ++++++++++ jest.setup.js | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 jest.setup.js diff --git a/jest.config.js b/jest.config.js index 294be30..a471d13 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,3 +1,13 @@ module.exports = { preset: '@react-native/jest-preset', + setupFiles: ['./jest.setup.js'], + moduleNameMapper: { + '^@xuqm/rn-common$': '/node_modules/@xuqm/rn-sdk/packages/common/src', + '^@xuqm/rn-im$': '/node_modules/@xuqm/rn-sdk/packages/im/src', + '^@xuqm/rn-push$': '/node_modules/@xuqm/rn-sdk/packages/push/src', + '^@xuqm/rn-update$': '/node_modules/@xuqm/rn-sdk/packages/update/src', + }, + transformIgnorePatterns: [ + 'node_modules/(?!((@react-native|react-native|@react-navigation|@xuqm/rn-sdk)/))', + ], }; diff --git a/jest.setup.js b/jest.setup.js new file mode 100644 index 0000000..21b22d2 --- /dev/null +++ b/jest.setup.js @@ -0,0 +1,24 @@ +jest.mock('@react-native-async-storage/async-storage', () => + require('@react-native-async-storage/async-storage/jest/async-storage-mock'), +); + +jest.mock('react-native-audio-recorder-player', () => ({ + startRecorder: jest.fn(async () => 'xuqm_audio.m4a'), + stopRecorder: jest.fn(async () => 'xuqm_audio.m4a'), + addRecordBackListener: jest.fn(), + removeRecordBackListener: jest.fn(), + startPlayer: jest.fn(async () => undefined), + stopPlayer: jest.fn(async () => undefined), + addPlayBackListener: jest.fn(), + removePlayBackListener: jest.fn(), +})); + +jest.mock('react-native-image-picker', () => ({ + launchImageLibrary: jest.fn(async () => ({ assets: [] })), +})); + +jest.mock('react-native-document-picker', () => ({ + pickSingle: jest.fn(), + isCancel: jest.fn(() => true), + types: { allFiles: '*/*' }, +}));