用途
laravel-tdd 是一个专门针对 Laravel 应用的测试驱动开发(TDD)技能,使用 Pest PHP 作为测试框架。它的核心主张是:先写测试,看它失败,再写最小代码使其通过。该技能把通用 TDD 原则适配到 Laravel 的测试特性与框架模式上。
何时使用
资料明确列出以下场景应始终使用 TDD:
- 新功能(控制器、模型、服务)
- 缺陷修复
- API 端点
- 数据库迁移与模型
- 表单验证
- 授权策略
- 队列任务
- Artisan 命令
- 中间件
以下场景被列为例外(需询问人类伙伴):
- 一次性原型
- 配置文件
- 仅视图变更(无逻辑)
主要能力:Laravel TDD 循环
流程为:RED → 验证 RED → GREEN → 验证 GREEN → REFACTOR → 重复。
-
RED - 编写失败测试:编写一个最小测试,说明该 Laravel 功能应做什么。资料给出的功能测试示例使用 Pest 的 test() 函数,通过 User::factory()->create() 创建用户,使用 $this->actingAs($user)->post('/posts', [...])->assertRedirect('/posts'),并用 expect(Post::where('title', 'My First Post')->exists())->toBeTrue() 与 expect(Post::first()->user_id)->toBe($user->id) 进行断言。
-
验证 RED - 看它失败:运行 php artisan test --filter=authenticated_user_can_create_post。
-
GREEN - 最小 Laravel 代码:编写最简单的 Laravel 代码使测试通过。
-
验证 GREEN - 看它通过:运行 php artisan test。
-
REFACTOR - 清理 Laravel 代码:仅在测试通过后进行,包括为复杂逻辑抽取服务、为授权创建策略、为可复用性添加查询作用域、使用事件处理副作用。
Laravel 专用测试模式
资料提供了三类示例:
-
数据库测试:使用 Illuminate\Foundation\Testing\RefreshDatabase,通过 uses(RefreshDatabase::class) 引入;测试中创建用户并提交请求,再用 $this->assertDatabaseHas('posts', ['title' => 'Test']) 校验数据库状态。
-
授权测试:创建用户与文章,使用 $this->actingAs($user)->delete("/posts/{$post->id}")->assertForbidden() 验证用户不能删除他人文章。
-
API 测试:使用 $this->actingAs($user, 'sanctum')->postJson('/api/posts', [...])->assertCreated() 验证通过 API 创建文章。
验证清单
资料给出的检查项包括:迁移测试通过、模型关系已测试、控制器动作已测试、验证规则已测试、授权已测试、数据库状态已验证、所有测试通过、使用了 RefreshDatabase、使用了工厂。
限制与提醒
资料强调:每个 Laravel 功能都应有先失败过的测试,否则不算 TDD。关于该技能的安装方式、收费、价格、支持平台等信息,资料中暂未提供。