47 lines
1.8 KiB
JavaScript
47 lines
1.8 KiB
JavaScript
|
|
/**
|
|||
|
|
* Jest 配置
|
|||
|
|
*
|
|||
|
|
* 仅对消息状态核心逻辑(store 幂等性 / 实时事件管道 / 未读计数原子性)做单测,
|
|||
|
|
* 不覆盖 RN / Expo UI。所有平台依赖(@/services/core、@/database、@/core/events、
|
|||
|
|
* @/stores/auth、@/services/message)在测试中通过 moduleNameMapper 映射到 mock。
|
|||
|
|
*/
|
|||
|
|
const { pathsToModuleNameMapper } = require('ts-jest');
|
|||
|
|
|
|||
|
|
const tsconfig = require('./tsconfig.json');
|
|||
|
|
const tsconfigBase = require('expo/tsconfig.base.json');
|
|||
|
|
|
|||
|
|
// 合并 base + 项目 paths
|
|||
|
|
const paths = {
|
|||
|
|
...(tsconfigBase.compilerOptions.paths || {}),
|
|||
|
|
...(tsconfig.compilerOptions.paths || {}),
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
module.exports = {
|
|||
|
|
preset: 'ts-jest',
|
|||
|
|
testEnvironment: 'node',
|
|||
|
|
roots: ['<rootDir>/src'],
|
|||
|
|
testMatch: ['**/__tests__/**/*.test.ts'],
|
|||
|
|
moduleNameMapper: {
|
|||
|
|
// 平台依赖统一映射到 mock(必须放在 @/* 通配之前,否则会被通配吞掉)
|
|||
|
|
'^@/services/core$': '<rootDir>/src/stores/message/__tests__/mocks/coreMock.ts',
|
|||
|
|
'^@/services/message$': '<rootDir>/src/stores/message/__tests__/mocks/messageServiceMock.ts',
|
|||
|
|
'^@/database$': '<rootDir>/src/stores/message/__tests__/mocks/databaseMock.ts',
|
|||
|
|
'^@/core/events/EventBus$': '<rootDir>/src/stores/message/__tests__/mocks/eventBusMock.ts',
|
|||
|
|
'^@/stores/auth/authStore$': '<rootDir>/src/stores/message/__tests__/mocks/authStoreMock.ts',
|
|||
|
|
'^@react-native-async-storage/async-storage$':
|
|||
|
|
'<rootDir>/src/stores/message/__tests__/mocks/asyncStorageMock.ts',
|
|||
|
|
// @/* 路径别名 → 真实 src(通配兜底,放最后)
|
|||
|
|
...pathsToModuleNameMapper(paths, { prefix: '<rootDir>/' }),
|
|||
|
|
},
|
|||
|
|
transform: {
|
|||
|
|
'^.+\\.tsx?$': [
|
|||
|
|
'ts-jest',
|
|||
|
|
{
|
|||
|
|
tsconfig: '<rootDir>/src/stores/message/__tests__/tsconfig.json',
|
|||
|
|
isolatedModules: true,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
},
|
|||
|
|
clearMocks: true,
|
|||
|
|
};
|