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

# PisellLookup 组件测试用例文档

## 测试环境

- React 版本：^18.0.0
- Ant Design 版本：^5.0.0
- 测试框架：Jest + React Testing Library
- 浏览器：Chrome 最新版、Safari 最新版、Firefox 最新版

## 测试用例分类

### 一、触发器功能测试

#### 1.1 Input 触发器

| 用例编号   | 测试项         | 测试步骤                                                   | 预期结果               | 优先级 |
|--------|-------------|--------------------------------------------------------|--------------------|-----|
| TC-001 | Input 触发器渲染 | 1. 设置 triggerType="input"<br>2. 渲染组件                   | Input 输入框正常显示      | P0  |
| TC-002 | Input 聚焦打开  | 1. 点击 Input 输入框<br>2. 观察结果区                            | Inline 模式下结果区展开    | P0  |
| TC-003 | Input 输入关键词 | 1. 在 Input 中输入文本<br>2. 观察 onChange 回调                  | 触发 onChange，参数为输入值 | P0  |
| TC-004 | Input 占位符显示 | 1. 设置 placeholder="搜索商品"<br>2. 渲染组件                    | 显示占位符文本            | P1  |
| TC-005 | Input 前缀图标  | 1. 设置 showPrefixIcon={true}<br>2. 渲染组件                 | 显示前缀搜索图标           | P1  |
| TC-006 | Input 清除按钮  | 1. 输入内容<br>2. 点击清除按钮                                   | 清空输入内容，触发 onChange | P1  |
| TC-007 | Input 确认按钮  | 1. 设置 showConfirmButton={true}<br>2. 输入内容<br>3. 点击确认按钮 | 触发 onSearch 回调     | P0  |
| TC-008 | Input 扫码按钮  | 1. 设置 showScan={true}<br>2. 点击扫码图标                     | 打开扫码功能（预留）         | P2  |
| TC-009 | Input 禁用状态  | 1. 设置 disabled={true}<br>2. 尝试输入                       | 输入框不可输入            | P1  |
| TC-010 | Input 尺寸-默认 | 1. 设置 size="middle"<br>2. 渲染组件                         | 显示默认尺寸输入框          | P1  |
| TC-011 | Input 尺寸-大号 | 1. 设置 size="large"<br>2. 渲染组件                          | 显示大号输入框            | P1  |

#### 1.2 Button 触发器

| 用例编号   | 测试项          | 测试步骤                                  | 预期结果             | 优先级 |
|--------|--------------|---------------------------------------|------------------|-----|
| TC-012 | Button 触发器渲染 | 1. 设置 triggerType="button"<br>2. 渲染组件 | 显示按钮触发器          | P0  |
| TC-013 | Button 点击打开  | 1. 点击按钮<br>2. 观察 Modal                | Modal 打开，显示搜索界面  | P0  |
| TC-014 | Button 文本自定义 | 1. 设置 buttonText="搜索商品"<br>2. 渲染组件    | 按钮显示自定义文本        | P1  |
| TC-015 | Button 禁用状态  | 1. 设置 disabled={true}<br>2. 点击按钮      | 按钮不可点击，Modal 不打开 | P1  |

#### 1.3 Icon 触发器

| 用例编号   | 测试项        | 测试步骤                                      | 预期结果            | 优先级 |
|--------|------------|-------------------------------------------|-----------------|-----|
| TC-016 | Icon 触发器渲染 | 1. 设置 triggerType="icon"<br>2. 渲染组件       | 显示搜索图标          | P0  |
| TC-017 | Icon 点击打开  | 1. 点击图标<br>2. 观察 Modal                    | Modal 打开，显示搜索界面 | P0  |
| TC-018 | Icon 自定义   | 1. 设置 triggerIcon={CustomIcon}<br>2. 渲染组件 | 显示自定义图标         | P1  |
| TC-019 | Icon 禁用状态  | 1. 设置 disabled={true}<br>2. 点击图标          | 图标置灰，不可点击       | P1  |

#### 1.4 Text 触发器

| 用例编号   | 测试项        | 测试步骤                                | 预期结果            | 优先级 |
|--------|------------|-------------------------------------|-----------------|-----|
| TC-020 | Text 触发器渲染 | 1. 设置 triggerType="text"<br>2. 渲染组件 | 显示文本触发器         | P0  |
| TC-021 | Text 点击打开  | 1. 点击文本<br>2. 观察 Modal              | Modal 打开，显示搜索界面 | P0  |
| TC-022 | Text 自定义   | 1. 设置 triggerText="点击搜索"<br>2. 渲染组件 | 显示自定义文本         | P1  |
| TC-023 | Text 禁用状态  | 1. 设置 disabled={true}<br>2. 点击文本    | 文本置灰，不可点击       | P1  |

#### 1.5 自定义触发器

| 用例编号   | 测试项      | 测试步骤                                     | 预期结果            | 优先级 |
|--------|----------|------------------------------------------|-----------------|-----|
| TC-024 | 自定义触发器渲染 | 1. 设置 trigger={CustomTrigger}<br>2. 渲染组件 | 显示自定义触发器        | P0  |
| TC-025 | 自定义触发器点击 | 1. 点击自定义触发器<br>2. 观察 Modal               | Modal 打开，显示搜索界面 | P0  |
| TC-026 | 自定义触发器禁用 | 1. 设置 disabled={true}<br>2. 点击触发器        | 触发器不可点击         | P1  |

### 二、搜索行为测试

#### 2.1 搜索模式

| 用例编号   | 测试项       | 测试步骤                                                         | 预期结果           | 优先级 |
|--------|-----------|--------------------------------------------------------------|----------------|-----|
| TC-027 | 实时搜索模式    | 1. 设置 searchMode="realtime"<br>2. 输入内容<br>3. 等待防抖时间          | 自动触发 onSearch  | P0  |
| TC-028 | 确认触发模式    | 1. 设置 searchMode="confirm"<br>2. 输入内容<br>3. 点击确认按钮           | 点击后触发 onSearch | P0  |
| TC-029 | Enter 键触发 | 1. 输入内容<br>2. 按 Enter 键                                      | 触发 onSearch    | P0  |
| TC-030 | 防抖功能      | 1. 设置 debounceTime={300}<br>2. 快速输入多个字符<br>3. 观察 onSearch 调用 | 300ms 后只触发一次   | P0  |
| TC-031 | 自定义防抖时间   | 1. 设置 debounceTime={500}<br>2. 快速输入<br>3. 计时观察               | 500ms 后触发      | P1  |

#### 2.2 受控模式

| 用例编号   | 测试项    | 测试步骤                                                     | 预期结果                     | 优先级 |
|--------|--------|----------------------------------------------------------|--------------------------|-----|
| TC-032 | 受控关键词  | 1. 设置 value="test"<br>2. 设置 onChange 回调<br>3. 渲染组件       | 显示 "test"，输入时触发 onChange | P0  |
| TC-033 | 非受控关键词 | 1. 设置 defaultValue="test"<br>2. 渲染组件<br>3. 输入新内容         | 初始显示 "test"，可自由输入        | P0  |
| TC-034 | 受控可见性  | 1. 设置 visible={true}<br>2. 设置 onVisibleChange<br>3. 渲染组件 | 结果区显示，关闭时触发回调            | P1  |
| TC-035 | 非受控可见性 | 1. 设置 defaultVisible={false}<br>2. 渲染组件                  | 初始隐藏，可自由控制               | P1  |

### 三、辅助功能测试

#### 3.1 搜索历史

| 用例编号   | 测试项       | 测试步骤                                                            | 预期结果            | 优先级 |
|--------|-----------|-----------------------------------------------------------------|-----------------|-----|
| TC-036 | 显示搜索历史    | 1. 设置 showHistory={true}<br>2. 打开搜索<br>3. 观察历史记录                | 显示历史记录列表        | P0  |
| TC-037 | 保存搜索历史    | 1. 搜索关键词 "test"<br>2. 重新打开搜索<br>3. 观察历史记录                       | "test" 出现在历史记录中 | P0  |
| TC-038 | 点击历史记录    | 1. 点击历史记录项<br>2. 观察输入框和搜索结果                                     | 填入关键词并触发搜索      | P0  |
| TC-039 | 删除历史记录    | 1. 点击历史记录的删除按钮<br>2. 观察列表                                       | 该项从列表中移除        | P1  |
| TC-040 | 清空历史记录    | 1. 点击 "清空" 按钮<br>2. 观察列表                                        | 所有历史记录清空        | P1  |
| TC-041 | 历史记录上限    | 1. 设置 maxHistoryCount={5}<br>2. 搜索 10 次<br>3. 观察历史记录            | 只保留最新 5 条       | P1  |
| TC-042 | 历史记录去重    | 1. 搜索 "test"<br>2. 再次搜索 "test"<br>3. 观察历史记录                     | 只有一条 "test" 记录  | P1  |
| TC-043 | 自定义存储 Key | 1. 设置 historyKey="custom_key"<br>2. 搜索并保存<br>3. 检查 localStorage | 使用自定义 key 存储    | P2  |

#### 3.2 联想词

| 用例编号   | 测试项     | 测试步骤                                                                  | 预期结果       | 优先级 |
|--------|---------|-----------------------------------------------------------------------|------------|-----|
| TC-044 | 显示联想词   | 1. 设置 showSuggestions={true}<br>2. 提供 onLoadSuggestions 回调<br>3. 输入内容 | 显示联想词列表    | P0  |
| TC-045 | 点击联想词   | 1. 点击联想词项<br>2. 观察输入框和搜索结果                                            | 填入关键词并触发搜索 | P0  |
| TC-046 | 联想词异步加载 | 1. onLoadSuggestions 返回 Promise<br>2. 输入内容<br>3. 观察加载过程               | 异步加载联想词并显示 | P1  |
| TC-047 | 联想词空状态  | 1. onLoadSuggestions 返回空数组<br>2. 输入内容                                 | 不显示联想词区域   | P1  |

#### 3.3 热门搜索

| 用例编号   | 测试项      | 测试步骤                                                            | 预期结果         | 优先级 |
|--------|----------|-----------------------------------------------------------------|--------------|-----|
| TC-048 | 显示热门搜索   | 1. 设置 showHotWords={true}<br>2. 提供 onLoadHotWords 回调<br>3. 打开搜索 | 无输入时显示热门搜索   | P0  |
| TC-049 | 点击热门搜索   | 1. 点击热门搜索标签<br>2. 观察输入框和搜索结果                                    | 填入关键词并触发搜索   | P0  |
| TC-050 | 热门搜索互斥   | 1. 显示热门搜索<br>2. 输入内容<br>3. 观察界面                                 | 热门搜索隐藏，显示联想词 | P1  |
| TC-051 | 热门搜索异步加载 | 1. onLoadHotWords 返回 Promise<br>2. 打开搜索<br>3. 观察加载过程            | 异步加载热门搜索并显示  | P1  |

### 四、结果展示测试

#### 4.1 Inline 模式

| 用例编号   | 测试项         | 测试步骤                                   | 预期结果         | 优先级 |
|--------|-------------|----------------------------------------|--------------|-----|
| TC-052 | Inline 模式渲染 | 1. 设置 displayType="inline"<br>2. 聚焦输入框 | 结果区在输入框下方展开  | P0  |
| TC-053 | Inline 位置   | 1. 在页面不同位置渲染<br>2. 聚焦输入框               | 结果区始终在输入框正下方 | P1  |
| TC-054 | Inline 层级   | 1. 设置 zIndex={2000}<br>2. 聚焦输入框        | 结果区显示在指定层级   | P1  |

#### 4.2 Popup 模式

| 用例编号   | 测试项          | 测试步骤                                  | 预期结果        | 优先级 |
|--------|--------------|---------------------------------------|-------------|-----|
| TC-055 | Popup 模式渲染   | 1. 设置 displayType="popup"<br>2. 聚焦输入框 | 浮层展示搜索结果    | P0  |
| TC-056 | Popup 宽度     | 1. 设置 popupWidth={400}<br>2. 打开浮层     | 浮层宽度为 400px | P1  |
| TC-057 | Popup 点击外部关闭 | 1. 打开浮层<br>2. 点击浮层外部                  | 浮层关闭        | P1  |

#### 4.3 Modal 模式

| 用例编号   | 测试项           | 测试步骤                                                 | 预期结果          | 优先级 |
|--------|---------------|------------------------------------------------------|---------------|-----|
| TC-058 | Modal 模式渲染    | 1. 设置 displayType="modal"<br>2. 点击触发器                | Modal 打开      | P0  |
| TC-059 | Modal 默认宽度    | 1. 不设置 modalWidth<br>2. 打开 Modal                     | 宽度为 834px     | P0  |
| TC-060 | Modal 自定义宽度   | 1. 设置 modalWidth={1000}<br>2. 打开 Modal               | 宽度为 1000px    | P1  |
| TC-061 | Modal 自定义样式   | 1. 设置 modalStyle={{...}}<br>2. 打开 Modal              | 应用自定义样式       | P1  |
| TC-062 | Modal 挂载点     | 1. 设置 getContainer={...}<br>2. 打开 Modal<br>3. 检查 DOM | Modal 挂载到指定节点 | P1  |
| TC-063 | Modal 点击遮罩关闭  | 1. 设置 maskClosable={true}<br>2. 打开 Modal<br>3. 点击遮罩  | Modal 关闭      | P1  |
| TC-064 | Modal 点击遮罩不关闭 | 1. 设置 maskClosable={false}<br>2. 打开 Modal<br>3. 点击遮罩 | Modal 不关闭     | P1  |
| TC-065 | Modal ESC 关闭  | 1. 打开 Modal<br>2. 按 ESC 键                            | Modal 关闭      | P1  |

#### 4.4 Drawer 模式

| 用例编号   | 测试项          | 测试步骤                                           | 预期结果      | 优先级 |
|--------|--------------|------------------------------------------------|-----------|-----|
| TC-066 | Drawer 模式渲染  | 1. 设置 displayType="drawer"<br>2. 点击触发器         | Drawer 打开 | P0  |
| TC-067 | Drawer 默认宽度  | 1. 不设置 drawerWidth<br>2. 打开 Drawer             | 宽度为 378px | P0  |
| TC-068 | Drawer 自定义宽度 | 1. 设置 drawerWidth={500}<br>2. 打开 Drawer        | 宽度为 500px | P1  |
| TC-069 | Drawer 右侧位置  | 1. 设置 drawerPlacement="right"<br>2. 打开 Drawer  | 从右侧滑出     | P1  |
| TC-070 | Drawer 左侧位置  | 1. 设置 drawerPlacement="left"<br>2. 打开 Drawer   | 从左侧滑出     | P1  |
| TC-071 | Drawer 顶部位置  | 1. 设置 drawerPlacement="top"<br>2. 打开 Drawer    | 从顶部滑出     | P2  |
| TC-072 | Drawer 底部位置  | 1. 设置 drawerPlacement="bottom"<br>2. 打开 Drawer | 从底部滑出     | P2  |

#### 4.5 Detached 模式

| 用例编号   | 测试项           | 测试步骤                                    | 预期结果     | 优先级 |
|--------|---------------|-----------------------------------------|----------|-----|
| TC-073 | Detached 模式渲染 | 1. 设置 displayType="detached"<br>2. 打开搜索 | 独立展示搜索界面 | P0  |
| TC-074 | Detached 模式样式 | 1. 设置 containerStyle<br>2. 打开搜索         | 应用自定义样式  | P1  |

### 五、结果渲染测试

| 用例编号   | 测试项     | 测试步骤                                            | 预期结果       | 优先级 |
|--------|---------|-------------------------------------------------|------------|-----|
| TC-075 | 自定义结果渲染 | 1. 设置 resultRender 函数<br>2. 搜索内容                | 显示自定义渲染的结果 | P0  |
| TC-076 | 结果渲染参数  | 1. resultRender 接收 keyword 和 onClose<br>2. 验证参数 | 参数正确传递     | P0  |
| TC-077 | 加载状态    | 1. 设置 loading={true}<br>2. 观察界面                 | 显示加载动画     | P1  |
| TC-078 | 空状态渲染   | 1. 设置 emptyRender 函数<br>2. 无输入时打开               | 显示自定义空状态   | P1  |
| TC-079 | 默认空状态   | 1. 不设置 emptyRender<br>2. 无输入时打开                 | 显示默认空状态    | P1  |

### 六、扫码功能测试

| 用例编号   | 测试项    | 测试步骤                              | 预期结果         | 优先级 |
|--------|--------|-----------------------------------|--------------|-----|
| TC-080 | 扫码按钮显示 | 1. 设置 showScan={true}<br>2. 渲染组件  | 显示扫码图标       | P1  |
| TC-081 | 扫码按钮隐藏 | 1. 设置 showScan={false}<br>2. 渲染组件 | 不显示扫码图标      | P1  |
| TC-082 | 扫码结果填入 | 1. 点击扫码<br>2. 扫码成功<br>3. 观察输入框    | 扫码结果自动填入     | P1  |
| TC-083 | 扫码触发搜索 | 1. 扫码成功<br>2. 观察 onSearch 回调      | 自动触发搜索       | P1  |
| TC-084 | 扫码回调   | 1. 设置 onScan 回调<br>2. 扫码成功        | 触发 onScan 回调 | P1  |
| TC-085 | 扫码界面打开 | 1. 点击扫码图标<br>2. 观察界面              | 打开全屏扫码界面     | P1  |
| TC-086 | 扫码界面关闭 | 1. 打开扫码界面<br>2. 点击关闭按钮            | 关闭扫码界面，释放摄像头 | P1  |

### 七、样式与响应式测试

| 用例编号   | 测试项     | 测试步骤                                             | 预期结果      | 优先级 |
|--------|---------|--------------------------------------------------|-----------|-----|
| TC-085 | 自定义类名   | 1. 设置 className="custom"<br>2. 渲染组件<br>3. 检查 DOM | 包含自定义类名   | P1  |
| TC-086 | 自定义样式   | 1. 设置 style={{...}}<br>2. 渲染组件                   | 应用自定义样式   | P1  |
| TC-087 | 容器类名    | 1. 设置 containerClassName<br>2. 打开搜索              | 容器包含自定义类名 | P1  |
| TC-088 | 容器样式    | 1. 设置 containerStyle<br>2. 打开搜索                  | 容器应用自定义样式 | P1  |
| TC-089 | 响应式-桌面端 | 1. 在 1920px 宽度下测试<br>2. 打开搜索                     | 正常显示      | P1  |
| TC-090 | 响应式-平板端 | 1. 在 768px 宽度下测试<br>2. 打开搜索                      | 自适应显示     | P1  |
| TC-091 | 响应式-移动端 | 1. 在 375px 宽度下测试<br>2. 打开搜索                      | 移动端优化显示   | P1  |

### 八、事件回调测试

| 用例编号   | 测试项                  | 测试步骤                  | 预期结果               | 优先级 |
|--------|----------------------|-----------------------|--------------------|-----|
| TC-092 | onChange 回调          | 1. 输入内容<br>2. 观察回调    | 触发 onChange，参数为新值  | P0  |
| TC-093 | onSearch 回调          | 1. 触发搜索<br>2. 观察回调    | 触发 onSearch，参数为关键词 | P0  |
| TC-094 | onVisibleChange 回调   | 1. 打开/关闭搜索<br>2. 观察回调 | 触发回调，参数为可见性        | P1  |
| TC-095 | onOpen 回调            | 1. 打开搜索<br>2. 观察回调    | 触发 onOpen          | P1  |
| TC-096 | onClose 回调           | 1. 关闭搜索<br>2. 观察回调    | 触发 onClose         | P1  |
| TC-097 | onLoadHistory 回调     | 1. 设置回调<br>2. 打开搜索    | 调用回调获取历史记录         | P1  |
| TC-098 | onSaveHistory 回调     | 1. 设置回调<br>2. 搜索内容    | 调用回调保存历史记录         | P1  |
| TC-099 | onLoadSuggestions 回调 | 1. 设置回调<br>2. 输入内容    | 调用回调获取联想词          | P1  |
| TC-100 | onLoadHotWords 回调    | 1. 设置回调<br>2. 打开搜索    | 调用回调获取热门搜索         | P1  |

### 九、边界场景测试

| 用例编号   | 测试项              | 测试步骤                                      | 预期结果               | 优先级 |
|--------|------------------|-------------------------------------------|--------------------|-----|
| TC-101 | 空输入搜索            | 1. 不输入内容<br>2. 触发搜索                       | 不触发 onSearch 或显示提示 | P1  |
| TC-102 | 超长输入             | 1. 输入 1000 个字符<br>2. 观察输入框                | 正常处理，不报错           | P2  |
| TC-103 | 特殊字符输入           | 1. 输入特殊字符（&"等）<br>2. 观察显示                 | 正确显示和处理            | P2  |
| TC-104 | 快速切换可见性          | 1. 快速打开关闭多次<br>2. 观察组件状态                  | 状态正确，无报错           | P2  |
| TC-105 | localStorage 不可用 | 1. 禁用 localStorage<br>2. 使用搜索历史           | 降级处理，不报错           | P2  |
| TC-106 | 异步加载失败           | 1. onLoadSuggestions 返回 reject<br>2. 观察界面 | 捕获错误，不崩溃           | P2  |
| TC-107 | resultRender 报错  | 1. resultRender 抛出错误<br>2. 观察界面           | 错误边界捕获，不崩溃         | P2  |
| TC-108 | 同时受控和非受控         | 1. 同时设置 value 和 defaultValue<br>2. 观察行为   | 受控模式优先             | P2  |

### 十、性能测试

| 用例编号   | 测试项    | 测试步骤                                     | 预期结果                       | 优先级 |
|--------|--------|------------------------------------------|----------------------------|-----|
| TC-109 | 防抖性能   | 1. 快速输入 100 次<br>2. 观察 onSearch 调用次数     | 防抖生效，调用次数远少于输入次数           | P1  |
| TC-110 | 历史记录性能 | 1. 添加 1000 条历史记录<br>2. 打开搜索              | 只显示 maxHistoryCount 条，性能正常 | P2  |
| TC-111 | 大数据量渲染 | 1. resultRender 返回 1000 条数据<br>2. 观察渲染性能 | 渲染流畅，无明显卡顿                 | P2  |
| TC-112 | 内存泄漏   | 1. 反复打开关闭组件 100 次<br>2. 观察内存占用           | 内存稳定，无泄漏                   | P2  |

### 十一、兼容性测试

| 用例编号   | 测试项         | 测试步骤                | 预期结果      | 优先级 |
|--------|-------------|---------------------|-----------|-----|
| TC-113 | Chrome 浏览器  | 在 Chrome 最新版测试所有功能  | 功能正常      | P0  |
| TC-114 | Safari 浏览器  | 在 Safari 最新版测试所有功能  | 功能正常      | P0  |
| TC-115 | Firefox 浏览器 | 在 Firefox 最新版测试所有功能 | 功能正常      | P1  |
| TC-116 | Edge 浏览器    | 在 Edge 最新版测试所有功能    | 功能正常      | P1  |
| TC-117 | 移动端 Safari  | 在 iOS Safari 测试     | 功能正常，交互流畅 | P1  |
| TC-118 | 移动端 Chrome  | 在 Android Chrome 测试 | 功能正常，交互流畅 | P1  |

### 十二、可访问性测试

| 用例编号   | 测试项       | 测试步骤                            | 预期结果      | 优先级 |
|--------|-----------|---------------------------------|-----------|-----|
| TC-119 | Tab 键导航   | 1. 使用 Tab 键导航<br>2. 观察焦点        | 焦点按逻辑顺序移动 | P2  |
| TC-120 | Enter 键确认 | 1. 使用 Tab 定位到按钮<br>2. 按 Enter 键 | 触发对应操作    | P2  |
| TC-121 | ESC 键关闭   | 1. 打开搜索<br>2. 按 ESC 键           | 关闭搜索      | P2  |
| TC-122 | 屏幕阅读器     | 1. 使用屏幕阅读器<br>2. 导航组件           | 正确读取内容和状态 | P2  |
| TC-123 | 焦点管理      | 1. 打开 Modal<br>2. 观察焦点          | 焦点自动到输入框  | P2  |

## 自动化测试用例（需编写单元测试）

### 组件渲染测试

```typescript
describe('PisellLookup - Render', () => {
    test('应该正确渲染 Input 触发器', () => {
        // TC-001
    });

    test('应该正确渲染 Button 触发器', () => {
        // TC-012
    });

    test('应该正确渲染自定义触发器', () => {
        // TC-024
    });
});
```

### 交互测试

```typescript
describe('PisellLookup - Interaction', () => {
    test('聚焦输入框应该打开结果区', () => {
        // TC-002
    });

    test('点击按钮应该打开 Modal', () => {
        // TC-013
    });

    test('输入内容应该触发 onChange', () => {
        // TC-003
    });
});
```

### 搜索行为测试

```typescript
describe('PisellLookup - Search Behavior', () => {
    test('实时搜索模式应该自动触发搜索', () => {
        // TC-027
    });

    test('确认触发模式应该点击后搜索', () => {
        // TC-028
    });

    test('防抖应该生效', () => {
        // TC-030
    });
});
```

### 辅助功能测试

```typescript
describe('PisellLookup - Auxiliary Features', () => {
    test('应该显示搜索历史', () => {
        // TC-036
    });

    test('应该保存搜索历史', () => {
        // TC-037
    });

    test('应该显示联想词', () => {
        // TC-044
    });

    test('应该显示热门搜索', () => {
        // TC-048
    });
});
```

## Bug 汇总

> **说明**：此部分用于记录人工测试发现的 Bug，由测试人员填写。

### Bug 模板

| Bug ID  | 发现日期       | 严重程度 | Bug 描述 | 复现步骤             | 预期结果 | 实际结果 | 状态  | 修复日期 | 备注 |
|---------|------------|------|--------|------------------|------|------|-----|------|----|
| BUG-001 | 2026-02-02 | 高    | 示例 Bug | 1. 步骤1<br>2. 步骤2 | 预期结果 | 实际结果 | 待修复 | -    | -  |

### 已发现的 Bug

_（此处由测试人员填写发现的 Bug）_

| Bug ID | 发现日期 | 严重程度 | Bug 描述 | 复现步骤 | 预期结果 | 实际结果 | 状态 | 修复日期 | 备注 |
|--------|------|------|--------|------|------|------|----|------|----|
| -      | -    | -    | 暂无     | -    | -    | -    | -  | -    | -  |

---

## 测试进度

- [ ] 触发器功能测试（26个用例）
- [ ] 搜索行为测试（9个用例）
- [ ] 辅助功能测试（16个用例）
- [ ] 结果展示测试（22个用例）
- [ ] 结果渲染测试（5个用例）
- [ ] 扫码功能测试（5个用例）
- [ ] 样式与响应式测试（7个用例）
- [ ] 事件回调测试（9个用例）
- [ ] 边界场景测试（8个用例）
- [ ] 性能测试（4个用例）
- [ ] 兼容性测试（6个用例）
- [ ] 可访问性测试（5个用例）

**总计：122 个测试用例**

## 测试总结

_（测试完成后填写）_

- 测试开始日期：
- 测试结束日期：
- 通过用例数：
- 失败用例数：
- Bug 总数：
- 测试覆盖率：
- 测试结论：
