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

# PisellReservation 测试用例文档

## 1 测试概述

### 1.1 测试目标

验证预约看板在**内置列表**与**受控列表**下，日程、booking 请求、合并桌位行、平面图与 RecordBoard 子视图切换行为一致且无回归；关键纯函数在各种边界输入下输出稳定。

### 1.2 测试范围

- **数据层**：`data/*.ts` 内映射与合并（ booking → row、合并多源、搜索参数 merge ）。
- **Hooks**：日程防抖、跟随墙钟、floor plan 合并（可选分层：集成测试或 Story 驱动）。
- **UI**：RecordBoard 子视图切换、平面图点击打开详情、新建预约弹窗路由列表。
- **当前缺口**：`pisellReservation` 目录下暂无 `*.test.tsx`，下列用例为**建议清单**，落地时可按优先级拆分到 `packages/private-materials` 单测或 Storybook。

### 1.3 测试方法

- **单元测试**：Jest + `@testing-library/react`；纯函数优先覆盖。
- **组件/Storybook**：`PisellReservation` + mock `engineContext` / `request`；Visual 回归可选。
- **人工联调**：真实店铺平面图接口、宿主 sales 模块、WS 推送合并。

## 2 数据层（建议单元测试）

### 2.1 `shouldUseBuiltinReservationList`

- [ ] 未传 `data` 且无受控分页签名 → 内置模式。
- [ ] 传入非空 `data` 或完整受控分页 → 非内置。

### 2.2 `mergeSearchParamsBookingWindow` / `mergeSearchParamsBookingRange` / `mergeGridBookingSearchParams`

- [ ] 给定营业日边界与目标日，生成的 `booking_time` 窗口与文档约定一致。
- [ ] 日历视图可见区间与单日窗口互不覆盖（防抖 effect 分支行为可通过 spy `patchSearchParams` 断言）。

### 2.3 `buildReservationMergedTableRows`

- [ ] 仅 resource、仅 booking、两者并存、宿主 sales 注入时的行合并顺序与字段覆盖。
- [ ] `dataSourcesProp` 显式传入 `tables` 时优先策略符合预期。

### 2.4 `bookingListToReservationTableRows` / `formResourceItemToReservationRow`

- [ ] 典型接口字段 → `PisellReservationTableRow` 卡片态字段（不写死未文档字段；以现有映射为准）。

## 3 Hooks 与交互（建议集成或 RTL）

### 3.1 `useReservationScheduleDebounced`

- [ ] 受控 `scheduleValue` 时内部不与 props 打架。
- [ ] 防抖落定前后各触发一次下游 effect（可用 fake timers）。

### 3.2 `useReservationWallClockFollow`

- [ ] 开启 follow 时节拍更新；用户 `handleScheduleChange` 后关闭 follow。

### 3.3 `useFloorMapBookingInteraction`

- [ ] `onFloorMapBookingClick` 返回 `true` 时不打开内置详情。
- [ ] 未拦截时打开 `ReservationBookingDetailModal`（mock）。

## 4 RecordBoard 集成（建议 Story / RTL）

- [ ] `bodyViewStorageKey` 读写与 `readBodyViewFromStorageKey` 一致。
- [ ] `bodyViewSwitchable={false}` + `lockedBodyView` 锁定子视图。
- [ ] `floorPlanId={null}` 时不发起远程平面图 GET（mock request）。
- [ ] 表格视图下顶栏不包含完整日程带（快照或 DOM 查询类名 `pisell-reservation-*`）。

## 5 性能与稳定性（抽检）

- [ ] 时间轴 `snapToStep` 恒为 false、`cursorMode` 为 `cursor-moves`（合并后 props 断言）。
- [ ] loading 防抖：`useReservationLoadingShownDebounced` 短闪烁不晃屏（可选 E2E）。

## 6 回归清单（发版前人工）

- [ ] 内置模式：切换平面图 ↔ 表格，列表与桌位数据对齐。
- [ ] 资源墙筛选变更后，平面图 booking `form_record_ids` 与筛选一致。
- [ ] 跟随当前：开启后约 30s 内时刻刷新；改轴或换日后退出跟随。
- [ ] 新建预约：引擎路由多条时出现选择列表；单条直接跳转。
