# @d8d/mini-testing-utils

Taro小程序测试工具包，为所有mini UI包提供统一的测试工具函数和mock配置。

## 安装

```bash
pnpm add -D @d8d/mini-testing-utils
```

## 功能

- **测试环境设置**: `setupTestEnv` - 设置Taro测试环境变量和全局对象
- **组件渲染工具**: `renderTaroComponent` - 封装`@testing-library/react`的render函数，支持Taro组件
- **Taro组件Mock**: 完整的Taro组件mock配置，包含View、Text、Button等所有组件
- **Taro API Mock**: 提供Taro API的jest mock函数
- **Jest预设配置**: 统一的Jest配置预设，包含moduleNameMapper和transform设置
- **Mock文件**: 样式和文件导入的mock配置

## 使用方法

### 1. 在Jest配置中使用预设

在您的mini UI包的`jest.config.cjs`中：

```javascript
module.exports = {
  // 使用预设配置
  preset: '@d8d/mini-testing-utils/jest-preset',

  // 可以覆盖或扩展预设配置
  testMatch: [
    '<rootDir>/tests/**/*.test.{ts,tsx}'
  ]
}
```

### 2. 手动导入测试工具

在测试文件中：

```typescript
import {
  renderTaroComponent,
  setupTestEnv,
  setupTaroMocks,
  createTaroApiMocks,
  screen,
  fireEvent,
  waitFor
} from '@d8d/mini-testing-utils'

// 设置测试环境
beforeEach(() => {
  setupTestEnv()
  setupTaroMocks()
})

// 渲染Taro组件
test('renders Taro component', () => {
  const { getByText } = renderTaroComponent(<View>Hello</View>)
  expect(getByText('Hello')).toBeInTheDocument()
})

// 使用Taro API mock
test('calls Taro API', () => {
  const taroMocks = createTaroApiMocks()
  taroMocks.showToast('Test message')
  expect(taroMocks.showToast).toHaveBeenCalledWith('Test message')
})
```

### 3. 使用setup文件

在Jest配置的`setupFilesAfterEnv`中使用：

```javascript
module.exports = {
  // ...其他配置
  setupFilesAfterEnv: [
    '@d8d/mini-testing-utils/setup'
  ]
}
```

## 导出路径

包提供以下导出路径：

- `@d8d/mini-testing-utils` - 主入口，包含所有测试工具函数
- `@d8d/mini-testing-utils/testing` - 测试配置和mock文件导出
- `@d8d/mini-testing-utils/jest-preset` - Jest预设配置
- `@d8d/mini-testing-utils/setup` - 测试setup文件

## 模块导出兼容性

包已配置TypeScript源文件与JavaScript运行时的导出兼容性：

- **开发时**: 直接导入TypeScript源文件，支持类型检查和源码调试
- **运行时**: 导入编译后的JavaScript文件，确保兼容性
- **类型定义**: 自动生成`.d.ts`类型定义文件

## 与现有mini项目集成

此包基于现有mini项目的测试基础设施(`mini/tests/setup.ts`)构建，确保与现有测试模式兼容。

## 更新现有页面包

要更新现有页面包使用此测试工具包：

1. 添加依赖：`pnpm add -D @d8d/mini-testing-utils`
2. 更新Jest配置使用预设
3. 移除重复的mock配置和测试工具函数
4. 更新测试导入语句

## 开发

```bash
# 安装依赖
pnpm install

# 构建
pnpm build

# 运行测试
pnpm test

# 类型检查
pnpm typecheck
```

## 许可证

MIT