SuperAPI AI 工具集

laravel-tdd

测试与质量

查看项目

更新于 10-15 15:18

技能介绍

用途

laravel-tdd 是一个专门针对 Laravel 应用的测试驱动开发(TDD)技能,使用 Pest PHP 作为测试框架。它的核心主张是:先写测试,看它失败,再写最小代码使其通过。该技能把通用 TDD 原则适配到 Laravel 的测试特性与框架模式上。

何时使用

资料明确列出以下场景应始终使用 TDD:

  • 新功能(控制器、模型、服务)
  • 缺陷修复
  • API 端点
  • 数据库迁移与模型
  • 表单验证
  • 授权策略
  • 队列任务
  • Artisan 命令
  • 中间件

以下场景被列为例外(需询问人类伙伴):

  • 一次性原型
  • 配置文件
  • 仅视图变更(无逻辑)

主要能力:Laravel TDD 循环

流程为:RED → 验证 RED → GREEN → 验证 GREEN → REFACTOR → 重复。

  1. 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) 进行断言。

  2. 验证 RED - 看它失败:运行 php artisan test --filter=authenticated_user_can_create_post。

  3. GREEN - 最小 Laravel 代码:编写最简单的 Laravel 代码使测试通过。

  4. 验证 GREEN - 看它通过:运行 php artisan test。

  5. 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。关于该技能的安装方式、收费、价格、支持平台等信息,资料中暂未提供。