用途
本技能用于在 Laravel 应用中实践测试驱动开发(TDD),基于 PHPUnit、Pest、Laravel 模型工厂和测试辅助工具。适合在以下场景启用:编写新的 Laravel 应用或功能;实现使用 Sanctum 或 Passport 认证的 API 端点;测试 Eloquent 模型、关系、作用域和访问器;为 Laravel 项目搭建测试基础设施;为 HTTP 控制器和表单请求编写功能测试;模拟外部服务(队列、邮件、通知、HTTP)。
主要能力
TDD 工作流
采用红-绿-重构循环:
- RED:编写一个失败的测试。
- GREEN:编写迁移、模型和工厂使其通过。
- REFACTOR:在保持测试通过的前提下改进代码。
测试配置
提供 PHPUnit 配置示例,设置 Unit 与 Feature 测试套件,并在 <php> 中配置测试环境变量(APP_ENV、BCRYPT_ROUNDS、CACHE_STORE、DB_CONNECTION、DB_DATABASE、MAIL_MAILER、QUEUE_CONNECTION、SESSION_DRIVER)。同时提供基础 TestCase 设置,包含 actingAsUser() 和 actingAsAdmin() 辅助方法。
模型工厂
展示 UserFactory 与 ProductFactory 的定义方式,包括 admin()、unverified()、outOfStock() 等状态方法,以及工厂的使用方式(create、make、count、has 关系、sequence 序列)。
模型测试
覆盖敏感属性隐藏、作用域过滤、模型关系等测试写法,使用 RefreshDatabase 保证状态干净。
功能 / HTTP 测试
覆盖访客重定向、存储新资源、必填字段验证、越权修改他人资源等场景。
JSON API 测试
覆盖未认证请求拒绝、分页列表、创建资源、越权删除等,使用 assertJsonCount、assertJsonStructure、assertJsonPath 等断言。
Sanctum API 认证测试
覆盖注册、登录、错误密码登录失败、Bearer Token 认证请求等。
模拟与 Fake
提供 Http::fake(成功、失败、超时重试)、Mail::fake、Notification::fake、Queue::fake、Storage::fake、Event::fake 的用法示例。
Artisan 命令测试
使用 $this->artisan() 配合 expectsOutput 和 assertExitCode 测试命令输出与退出码。
授权测试
覆盖用户可更新自己的文章、不可更新他人文章、Gate before 授予超级管理员完全访问等。
Pest 功能测试
展示 Pest 的 uses、beforeEach、it 语法及常见断言。
覆盖率
提供 PHPUnit 与 Pest 的覆盖率命令,并给出各组件覆盖率目标:模型 95%+、Actions/Services 90%+、Form Requests 90%+、控制器 85%+、Policies 95%+、整体 80%+。
使用方式
按技能提供的示例配置 PHPUnit、编写基础 TestCase、定义模型工厂,然后按 TDD 循环编写模型测试、功能测试、API 测试与认证测试,并使用各类 Fake 隔离外部服务。覆盖率命令:
# PHPUnit(使用 clover 输出用于 CI 阈值检查)
vendor/bin/phpunit --coverage-html coverage --coverage-clover clover.xml
# Pest(内置阈值支持)
vendor/bin/pest --coverage --min=80
适用场景
- 新 Laravel 应用或功能的测试驱动开发
- 带 Sanctum/Passport 认证的 API 端点测试
- Eloquent 模型、关系、作用域、访问器测试
- HTTP 控制器与表单请求的功能测试
- 队列、邮件、通知、HTTP 等外部服务的模拟
- Artisan 命令与授权策略测试
限制
资料未提供该技能的安装命令、收费方式、价格、支持平台或具体效果数据,这些信息暂未提供。