# EnumPlus 单元测试指南

## 概述

本文档提供了在 EnumPlus 项目中使用 Jest 和 Playwright 编写测试的指南。目标是确保单元测试和端到端（E2E）测试共享一个公共代码库，同时适应两种测试框架之间的差异。

## 测试框架

- **Jest**：用于在 Node.js 环境中进行单元测试。
- **Playwright**：用于在浏览器环境中进行端到端（E2E）测试。

## 测试结构

每个测试分为两个主要部分：`evaluate` 和 `assert`。

- **Evaluate**：这一部分包含运行实际测试逻辑的代码。它应该是可序列化的，不依赖于闭包或外部状态。
- **Assert**：这一部分包含验证测试结果的断言。它也应该是可序列化的。

## 编写测试的指南

1. **序列化**：确保 `evaluate` 和 `assert` 部分都是可序列化的。避免使用闭包或无法序列化的外部状态。
2. **避免闭包**：尽量减少在 `evaluate` 部分使用闭包。如果闭包是必要的，请将它们包含在 `evaluate` 函数的返回值中，以确保它们在 `assert` 部分可访问。
3. **外部数据**：使用外部数据（例如 enum-plus、config、data）时，确保它与浏览器环境兼容。这可能涉及将数据编译到 `e2e` 目录中。
4. **一致的 API**：为 Jest 和 Playwright 测试使用一致的 API，以促进代码共享和维护。
5. **测试命名**：使用描述性的名称为测试命名，以清楚地表明它们的目的和功能。
6. **文档**：记录测试设计用来覆盖的任何特定行为或边缘情况。
7. **代码覆盖率**：确保测试覆盖了代码库中的关键路径和边缘情况。使用覆盖率工具来识别未覆盖的代码区域。代码覆盖率要求达到`100%`。

<!-- 1. jest和playwright复用一套代码
2. 所以在单元测试编写时还是有点区别
   1. test分为evaluate和assert两个部分
   2. 两个方法的入参和返回值都需要可序列化
   3. 尽量不使用闭包，如果必须要使用的话，请添加到evaluate的返回值中
   4. 用到的外部数据（例如enum-plus、config、data）等，需要考虑到浏览器端，需要编译到e2e目录中 -->
