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

# PisellEntityCard 组件测试用例文档

## 测试概览

本文档列出 PisellEntityCard 组件的测试用例点，基于 types.ts 与组件实现。

---

## 一、基础渲染测试

| 测试项          | 测试步骤                                                 | 预期结果                                                       | 测试类型 |
|--------------|------------------------------------------------------|------------------------------------------------------------|------|
| 根节点渲染        | 不传数据源，仅传 primaryText                                 | 存在 `.pisell-entity-card-wrap` 且内含 `.pisell-base-card-root` | 自动化  |
| 主文案渲染        | 传入 `primaryText="实体名称"`                              | 页面显示「实体名称」                                                 | 自动化  |
| 次级文案渲染       | 传入 `secondaryTexts=[{ text: '描述' }]`                 | 页面显示「描述」                                                   | 自动化  |
| 媒体区-头像       | 传入 `media={{ type: 'avatar', src: 'x', alt: '头像' }}` | 存在头像元素（.pisell-entity-card-media 或 antd Avatar）            | 自动化  |
| 标签渲染         | 传入 `tags=[{ text: '标签1' }]`                          | 页面显示「标签1」                                                  | 自动化  |
| 无媒体无主文案      | 不传 media、primaryText，传 secondaryTexts                | 不报错，可渲染次级或空内容                                              | 自动化  |
| className 合并 | 传入 `className="custom"`                              | 根卡片节点 class 包含 custom                                      | 自动化  |
| style 透传     | 传入 `style={{ padding: 20 }}`                         | BaseCard 根节点应用对应样式                                         | 自动化  |

---

## 二、显隐与默认值测试

| 测试项                     | 测试步骤                                        | 预期结果     | 测试类型 |
|-------------------------|---------------------------------------------|----------|------|
| showMedia 默认 true       | 传入 media，不传 showMedia                       | 显示媒体区    | 自动化  |
| showMedia=false         | 传入 media 且 showMedia=false                  | 不显示媒体区   | 自动化  |
| showPrimaryText 默认 true | 传入 primaryText，不传 showPrimaryText           | 显示主文案    | 自动化  |
| showPrimaryText=false   | 传入 primaryText 且 showPrimaryText=false      | 不显示主文案   | 自动化  |
| showSecondaryText=false | 传入 secondaryTexts 且 showSecondaryText=false | 不显示次级文案  | 自动化  |
| showTags=false          | 传入 tags 且 showTags=false                    | 不显示标签    | 自动化  |
| showActions 默认 false    | 传入 actions，不传 showActions                   | 不显示底部操作区 | 自动化  |
| showActions=true        | 传入 actions 且 showActions=true               | 显示底部操作区  | 自动化  |

---

## 三、密度与布局测试

| 测试项                  | 测试步骤                               | 预期结果                                     | 测试类型 |
|----------------------|------------------------------------|------------------------------------------|------|
| density 默认 B2        | 不传 density，传 secondaryTexts        | 次级按 B2 规则展示（最多 2 条/行数）                   | 自动化  |
| density=B1           | 传入 density="B1" 与 secondaryTexts   | 不显示次级文案                                  | 自动化  |
| density=B5           | 传入 density="B5" 与多条 secondaryTexts | 次级最多展示 5 条                               | 自动化  |
| layout 默认 horizontal | 不传 layout                          | Summary 区为横向排布（data-layout="horizontal"） | 自动化  |
| layout=vertical      | 传入 layout="vertical"               | Summary 区为竖向排布（data-layout="vertical"）   | 自动化  |
| width=content        | 不传 width 或 width="content"         | 外层宽度为 fit-content                        | 自动化  |
| width=full           | 传入 width="full"                    | 外层宽度 100%                                | 自动化  |
| width 数字             | 传入 width={300}                     | 外层宽度 300px                               | 自动化  |
| tagPosition=inline   | 传入 tagPosition="inline" 与 tags     | 标签与主文案同行                                 | 自动化  |
| tagPosition=below    | 传入 tagPosition="below" 与 tags      | 标签在次级下方                                  | 自动化  |

---

## 四、左滑删除测试

| 测试项             | 测试步骤                                                | 预期结果                                        | 测试类型 |
|-----------------|-----------------------------------------------------|---------------------------------------------|------|
| 未开启左滑           | 不传 swipeToDelete 或 swipeToDelete=false              | 无滑动容器，无删除按钮                                 | 自动化  |
| 开启左滑需 onDelete  | 传入 swipeToDelete=true 且 onDelete                    | 存在 .pisell-entity-card-swipe-container 与删除区 | 自动化  |
| 点击删除触发 onDelete | swipeToDelete=true、onDelete 为 jest.fn()，滑动露出删除后点击删除 | onDelete 被调用一次                              | 自动化  |

---

## 五、Actions 与插槽测试

| 测试项                  | 测试步骤                                                     | 预期结果                     | 测试类型 |
|----------------------|----------------------------------------------------------|--------------------------|------|
| actions 文本型          | showActions=true，actions=[{ type: 'text', label: '查看' }] | 显示「查看」                   | 自动化  |
| actions 按钮型          | actions=[{ type: 'button', label: '选择' }]                | 显示按钮样式操作                 | 自动化  |
| 点击 action 触发 onClick | action 配置 onClick 为 jest.fn()，点击该操作                      | 对应 onClick 被调用，且事件不冒泡到卡片 | 自动化  |
| renderPrimary 插槽     | 传入 renderPrimary={() => <span>自定义主文案</span>}             | 显示「自定义主文案」而非 primaryText | 自动化  |
| renderTags 插槽        | 传入 renderTags={() => <span>自定义标签</span>}                 | 显示「自定义标签」而非 tags 列表      | 自动化  |

---

## 六、BaseCard 透传与事件测试

| 测试项          | 测试步骤                          | 预期结果                    | 测试类型 |
|--------------|-------------------------------|-------------------------|------|
| clickable 透传 | 传入 clickable=false            | 卡片无 role="button"，不响应点击 | 自动化  |
| disabled 透传  | 传入 disabled=true              | 卡片有 aria-disabled，不响应点击 | 自动化  |
| onClick 触发   | 传入 onClick（jest.fn()），点击卡片内容区 | onClick 被调用一次           | 自动化  |
| children 渲染  | 传入 children={<div>额外内容</div>} | 卡片内显示「额外内容」             | 自动化  |

---

## 七、人工测试点

| 测试项           | 测试步骤                                              | 预期结果             |
|---------------|---------------------------------------------------|------------------|
| 横向布局视觉        | layout=horizontal，媒体+主+次级+标签                      | 媒体在左，文案在右，间距合理   |
| 竖向布局视觉        | layout=vertical                                   | 媒体在上、文案在下，居中对齐   |
| B2 次级行数       | density=B2，两条次级                                   | 次级区域最多约 2 行，超出省略 |
| B5 次级行数       | density=B5，多条次级                                   | 次级最多约 5 行        |
| 左滑手势          | 移动端或模拟 touch，左滑卡片                                 | 露出删除按钮，松手可回弹或保持  |
| 删除按钮样式        | 左滑露出删除                                            | 删除区红色背景、白色文字、可点击 |
| 主/次级省略        | 主文案或次级过长                                          | 单行/多行省略，不撑破布局    |
| 带 tooltip 的次级 | secondaryTexts=[{ text: 'x', showTooltip: true }] | 该行前有 info 图标     |

---

## Bug 汇总

### 待修复的 Bug

| Bug ID | 描述 | 优先级 | 状态 | 发现时间 |
|--------|----|-----|----|------|
| -      | -  | -   | -  | -    |

### 已修复的 Bug

| Bug ID | 描述 | 优先级 | 修复时间 | 修复方案 |
|--------|----|-----|------|------|
| -      | -  | -   | -    | -    |
