249 lines
No EOL
5.7 KiB
Markdown
249 lines
No EOL
5.7 KiB
Markdown
# 运行测试
|
||
|
||
## 目录
|
||
|
||
- [PHP 单元测试](#php-unit-tests)
|
||
- [基础测试命令](#basic-test-commands)
|
||
- [例子](#examples)
|
||
- [常用测试命令](#common-test-commands)
|
||
- [测试环境](#test-environment)
|
||
- [测试故障排除](#troubleshooting-tests)
|
||
- [解读测试输出](#interpreting-test-output)
|
||
- [最佳实践](#best-practices)
|
||
- [测试配置](#test-configuration)
|
||
- [JavaScript/Jest 测试](#javascriptjest-tests)
|
||
- [注意](#notes)
|
||
|
||
## PHP 单元测试
|
||
|
||
要在 WooCommerce 插件目录中运行 PHP 单元测试,请使用以下命令:
|
||
|
||
### 基础测试命令
|
||
|
||
```bash
|
||
# 运行所有 PHP 单元测试
|
||
pnpm run test:php:env
|
||
|
||
# 运行特定测试类
|
||
pnpm run test:php:env -- --filter TestClassName
|
||
|
||
# 运行特定测试方法
|
||
pnpm run test:php:env -- --filter TestClassName::test_method_name
|
||
|
||
# 以详细输出运行测试
|
||
pnpm run test:php:env -- --verbose --filter TestClassName
|
||
```
|
||
|
||
### 例子
|
||
|
||
```bash
|
||
# 运行支付扩展建议测试
|
||
pnpm run test:php:env -- --filter PaymentsExtensionSuggestionsTest
|
||
|
||
# 运行特定测试方法
|
||
pnpm run test:php:env -- --filter PaymentsExtensionSuggestionsTest::test_get_country_extensions_count_with_merchant_selling_online
|
||
```
|
||
|
||
## 常用测试命令
|
||
|
||
### 运行目录测试
|
||
|
||
```bash
|
||
# 运行目录中的所有测试
|
||
pnpm run test:php:env -- tests/php/src/Internal/Admin/
|
||
```
|
||
|
||
### 运行匹配样板的测试
|
||
|
||
```bash
|
||
# 运行所有管理员测试
|
||
pnpm run test:php:env -- --filter "Admin.*Test"
|
||
|
||
# 运行名称中包含“支付”的所有测试
|
||
pnpm run test:php:env -- --filter "Payment"
|
||
```
|
||
|
||
### 在首次失败时停止
|
||
|
||
```bash
|
||
# 在开发期间快速识别问题很有用
|
||
pnpm run test:php:env -- --stop-on-failure
|
||
```
|
||
|
||
### 获取测试覆盖率
|
||
|
||
```bash
|
||
# 获取覆盖率报告(如果已配置)
|
||
pnpm run test:php:env -- --coverage-text
|
||
```
|
||
|
||
## 测试环境
|
||
|
||
### 工作原理
|
||
|
||
测试通过 `wp-env` 在 Docker 中运行,并自动配置 WordPress/WooCommerce(PHPUnit 9.6.24,PHP 8.1)。
|
||
|
||
### 环境设置
|
||
|
||
测试环境是自动管理的,但您可以在需要时进行控制:
|
||
|
||
```bash
|
||
# 开始测试环境
|
||
wp-env start
|
||
|
||
# 停止测试环境
|
||
wp-env stop
|
||
|
||
# 重启测试环境
|
||
wp-env restart
|
||
|
||
# 销毁并重新创建环境
|
||
wp-env destroy
|
||
wp-env start
|
||
```
|
||
|
||
## 故障排除测试
|
||
|
||
| 问题 | 解决方案 |
|
||
|---------|----------|
|
||
| "Class not found" 错误 | 运行 `pnpm install` |
|
||
| 测试挂起/无法开始 | `wp-env stop && wp-env start` 或 `wp-env destroy && wp-env start` |
|
||
| 权限错误 | 检查 Docker 权限 |
|
||
| Xdebug 警告 | 忽略(不影响结果) |
|
||
|
||
## 解读测试输出
|
||
|
||
### 成功的测试运行
|
||
|
||
```text
|
||
PHPUnit 9.6.24
|
||
|
||
.................................................. 50 / 100 ( 50%)
|
||
.................................................. 100 / 100 (100%)
|
||
|
||
时间: 00:02.345, 内存: 24.00 MB
|
||
|
||
确定 (100 个测试, 250 个断言)
|
||
```
|
||
|
||
### 失败测试
|
||
|
||
```text
|
||
PHPUnit 9.6.24
|
||
|
||
.....F................................................. 50 / 100 ( 50%)
|
||
.................................................. 100 / 100 (100%)
|
||
|
||
时间: 00:02.345, 内存: 24.00 MB
|
||
|
||
有 1 个失败:
|
||
|
||
1) PaymentsExtensionSuggestionsTest::test_get_country_extensions_count_for_online_merchants 使用数据集 "美国" ('US', 5)
|
||
预期美国在线商户有 5 个扩展
|
||
断言失败,实际值 4 与预期值 5 不匹配。
|
||
|
||
/path/to/test/file.php:123
|
||
|
||
失败!
|
||
测试: 100, 断言: 250, 失败: 1.
|
||
```
|
||
|
||
### 理解测试失败
|
||
|
||
测试失败信息提供:
|
||
|
||
- **哪个测试失败:** 测试类和方法名称
|
||
- **测试数据:** 已使用的数据集(如果使用数据提供者)
|
||
- **预期与实际:** 预期结果和实际接收到的结果
|
||
- **位置:** 断言失败的文件和行号
|
||
|
||
## 最佳实践
|
||
|
||
### 开发期间
|
||
|
||
1. **运行特定测试** 针对您正在更改的代码:
|
||
|
||
```bash
|
||
pnpm run test:php:env -- --filter YourTestClass
|
||
```
|
||
|
||
2. **使用详细模式** 进行调试时:
|
||
|
||
```bash
|
||
pnpm run test:php:env -- --verbose --filter YourTestClass
|
||
```
|
||
|
||
3. **在首次失败时停止** 以一次专注于一个问题:
|
||
|
||
```bash
|
||
pnpm run test:php:env -- --stop-on-failure --filter YourTestClass
|
||
```
|
||
|
||
### 提交前
|
||
|
||
1. **运行所有受影响的测试:**
|
||
|
||
```bash
|
||
pnpm run test:php:env -- tests/php/src/Internal/YourFeature/
|
||
```
|
||
|
||
2. **确保所有测试通过** 后再提交
|
||
|
||
3. **检查代码质量**(参见 code-quality.md)
|
||
|
||
## 测试配置
|
||
|
||
测试配置文件:`plugins/woocommerce/phpunit.xml`
|
||
|
||
此文件包含:
|
||
|
||
- 测试套件定义
|
||
- 引导文件
|
||
- 覆盖率设置
|
||
- 日志记录配置
|
||
|
||
## JavaScript/Jest 测试
|
||
|
||
### 运行 JavaScript 测试
|
||
|
||
要为管理员客户端运行 JavaScript 测试,请导航到 `client/admin` 目录:
|
||
|
||
```bash
|
||
# 首先导航到 client/admin 目录
|
||
cd client/admin
|
||
|
||
# 运行所有 JavaScript 测试
|
||
pnpm test:js
|
||
|
||
# 在监视模式下运行测试
|
||
pnpm test:js -- --watch
|
||
|
||
# 运行特定的测试文件
|
||
pnpm test:js -- status-badge.test.tsx
|
||
|
||
# 运行测试并生成覆盖报告
|
||
pnpm test:js -- --coverage
|
||
```
|
||
|
||
### 测试文件位置
|
||
|
||
- JavaScript/Jest 测试:`client/admin/client/**/*.test.tsx` 或 `*.test.ts`
|
||
- Jest 配置:`client/admin/jest.config.js`
|
||
|
||
### JavaScript 测试故障排除
|
||
|
||
有关详细的 Jest 配置和测试样板/区块样板,请参阅 `client/admin/CLAUDE.md`。
|
||
|
||
常见问题:
|
||
|
||
- **测试未找到**:确保您在 `client/admin` 目录中
|
||
- **模块解析错误**:在 `client/admin` 目录中运行 `pnpm install`
|
||
- **缓存问题**:尝试 `pnpm test:js -- --clearCache`
|
||
|
||
## 注意事项
|
||
|
||
- 测试环境会自动处理 WordPress/WooCommerce 设置
|
||
- 支付测试中的扩展数量必须与实际实现完全一致
|
||
- 测试数据提供器对于测试多种场景非常有用
|
||
- 始终检查测试输出以获取有用的错误信息
|
||
- 有关 React/TypeScript 测试样板,请参阅 `client/admin/CLAUDE.md` |