woocommerce/.ai/skills/woocommerce-dev-cycle/zh-cn/running-tests.md
2026-04-15 10:18:01 +08:00

249 lines
No EOL
5.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 运行测试
## 目录
- [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/WooCommercePHPUnit 9.6.24PHP 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`