---
title: 测试文档
order: 4
category: atom
---

# PisellImport 测试文档

## 测试策略

PisellImport 为导入触发器 UI 组件，点击打开文件选择，支持 accept、multiple、maxSize 校验，通过后回调 onImport，超限回调 onError。测试覆盖：

1. **基础渲染**：默认及不同 variant/size/type 下的 DOM、类名与隐藏 input 的 accept/multiple
2. **Props 透传**：label、icon、disabled、className、style、accept、multiple 是否生效
3. **交互**：点击触发 input 选择、选择文件后 onImport 被调用且参数正确、maxSize 超限时 onError 被调用且不调用 onImport、disabled 时不触发
4. **边界**：无 onImport/onError 时选择文件不报错；多选时 files 数量正确

## 测试用例

### 1. 基础渲染

| 用例编号 | 描述 | 预期 |
| -------- | ---- | ---- |
| R.1 | 默认渲染（variant=button） | 根节点为 button，包含图标与默认文案（getText 或「导入」）；存在隐藏的 input[type=file] |
| R.2 | variant=icon | 仅渲染图标，无文案节点 |
| R.3 | size=small/medium/large | 根节点分别带类名 pisell-import--small/medium/large |
| R.4 | type=default/primary | 根节点分别带类名 pisell-import--default/primary |
| R.5 | disabled=true | 根节点带 pisell-import--disabled，button 的 disabled 为 true |
| R.6 | 传入 accept | input 的 accept 属性为传入值（如 ".xlsx,.csv"） |
| R.7 | multiple=true | input 的 multiple 为 true |

### 2. Props

| 用例编号 | 描述 | 预期 |
| -------- | ---- | ---- |
| P.1 | 传入 label | 文案区域显示传入的 label |
| P.2 | 传入 icon | 使用传入的 icon 节点，不显示默认图标 |
| P.3 | 传入 className | 根 button 的 class 包含该 className |
| P.4 | 传入 style | 根 button 应用对应内联样式 |

### 3. 交互

| 用例编号 | 描述 | 预期 |
| -------- | ---- | ---- |
| I.1 | 点击且未 disabled | 触发 input 的 click（可通过 ref 或模拟用户选择文件后触发 onChange） |
| I.2 | 选择文件且未设 maxSize | 调用 onImport 一次，第一个参数为 File[]，第二个为 ChangeEvent |
| I.3 | 选择文件且 multiple=true | onImport 收到的 files 长度与选择数量一致 |
| I.4 | 设置 maxSize，选择文件均未超限 | 调用 onImport，不调用 onError |
| I.5 | 设置 maxSize，其中一文件超限 | 调用 onError 一次，参数 type 为 'MAX_SIZE'，含 message、file；不调用 onImport；input value 被清空 |
| I.6 | disabled 时点击 | 不触发 input.click（或点击无效） |
| I.7 | 未传入 onImport 时选择文件 | 不报错，不抛错 |
| I.8 | 未传入 onError 时 maxSize 超限 | 不报错，不调用 onImport |

### 4. 人工测试点（Storybook）

- 各尺寸、各类型在 Chrome 下视觉与设计稿一致，与 PisellExport 对齐
- hover / focus / active 状态样式正常
- 禁用态灰化、不可点击
- 点击后系统文件选择框弹出，选择文件后回调行为符合预期；超限时仅 onError、不 onImport

---

## bug 汇总

（人工测试阶段将发现的 bug 记录于此）

| 日期 | 描述 | 状态 |
| ---- | ---- | ---- |
|      |      |      |
