本页面提供了关于使用 Zustand 进行状态管理的应用程序测试以及 Zustand 库本身开发/贡献的全面指南。有关在生产环境中重置状态的信息,请参阅 重置状态。
测试使用 Zustand 的应用程序需要特定的方法来确保适当的测试隔离和可靠的结果。本指南涵盖了设置测试环境、创建有效的模拟以及测试独立的 store 和消费它们的组件。
来源: docs/guides/testing.md7-53
在测试使用 Zustand 的应用程序之前,您需要配置测试运行器并设置适当的测试实用程序。
Zustand 可与任何现代 JavaScript 测试运行器配合使用,但官方支持和示例提供给
两种测试运行器都需要配置来处理 JavaScript/TypeScript 语法,并为组件测试提供模拟 DOM 环境 (JSDOM)。
对于测试连接到 Zustand store 的 React 组件,推荐的方法是
这些库鼓励像用户与组件交互那样进行测试,而不是测试实现细节。
来源: docs/guides/testing.md9-52
为确保测试相互隔离,您需要正确地模拟 Zustand 以在测试之间重置 store。方法在 Jest 和 Vitest 之间略有不同。
创建一个模拟,它将跟踪和重置所有 store
模拟系统的工作原理是
create 和 createStore 函数storeResetFns 集合中跟踪每个 store 的初始状态这确保了测试不会通过共享的全局状态相互影响。
来源: docs/guides/testing.md84-149
Vitest 的设置与 Jest 类似,但需要 ES 模块语法
__mocks__ 目录zustand.ts 模拟文件,该文件导出 create 和 createStore 的包装版本来源: docs/guides/testing.md173-247
测试使用 Zustand 的 React 组件涉及
这是使用 Zustand 的组件的典型测试流程
来源: docs/guides/testing.md294-508
对于使用 create() 创建的全局 Zustand store 的组件
模拟实现将确保 store 在测试之间被重置。
来源: docs/guides/testing.md394-439
对于使用 React Context 中的 Zustand 的组件
相同的 store 重置机制也适用于基于 Context 的 store。
来源: docs/guides/testing.md459-508
当贡献 Zustand 库本身时,请遵循以下指南
Zustand 采用单仓库结构,以提高清晰度和可维护性
来源: .github/pull_request_template.md1-9
贡献 Zustand
问题跟踪:
pnpm run fix 格式化代码和文档拉取请求:
来源: .github/pull_request_template.md1-9 .github/ISSUE_TEMPLATE/config.yml1-12 .github/ISSUE_TEMPLATE/bug_report.md1-7
在开发库本身时
以下是 Zustand 应用程序的一些实际测试模式示例
此模式直接测试 store 的功能
此模式测试使用 Zustand store 的组件
来源: docs/guides/testing.md394-508
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 相互影响的测试 | Store 在测试之间未正确重置 | 确保 Zustand mock 已正确配置 |
| SSR 中的 hydration 错误 | 服务器和客户端之间的 store 状态不匹配 | 在两边初始化相同的状态 |
| 测试中的类型错误 | 缺少类型定义 | 添加适当的 TypeScript 配置 |
| React 关于状态更新的警告 | 在 React 生命周期外使用 setState | 将状态更改包装在 act() 中 |
测试 Zustand 应用程序需要正确设置测试环境和模拟策略以确保测试隔离。通过遵循本指南中的模式和建议,您可以为独立和基于 Context 的 Zustand store 开发可靠的测试。
有关更具体的指南,请参阅