关于 laravel-tdd
laravel-tdd 是面向 Laravel 应用的测试驱动开发技能,结合 Pest PHP 与 Laravel 测试模式。它指导开发者先编写并验证失败测试,再实现功能并重构。
主要功能
- 01RED–GREEN–REFACTOR 循环
- 02Pest PHP 与 Laravel 测试模式
- 03数据库、授权与 API 测试
- 04Laravel 功能验证清单
适用场景
- 01以测试优先开发 Laravel 功能
- 02测试缺陷修复与 API 端点
- 03检查迁移、验证规则和授权
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ iserter/ laravel-claude-agents --skill laravel-tdd安装后在 Claude Code 中输入/laravel-tdd确认已加载。
详细介绍
Laravel 的测试驱动开发
概述
先编写测试。观察测试失败。编写最少的代码使其通过。
此技能针对使用 Pest PHP、Laravel 测试功能和框架特定模式的 Laravel 应用,调整了 TDD 原则。
适用场景
始终适用于 Laravel:
- 新功能(控制器、模型、服务)
- Bug 修复
- API 端点
- 数据库迁移和模型
- 表单验证
- 授权策略
- 队列任务
- Artisan 命令
- 中间件
例外情况(请咨询你的人工伙伴):
- 一次性原型
- 配置文件
- 仅视图的修改(无逻辑)
Laravel TDD 循环
RED → Verify RED → GREEN → Verify GREEN → REFACTOR → Repeat
RED - 编写失败的测试
编写一个最简测试,展示 Laravel 功能应如何运行。
功能测试示例:
<?php
use App\Models\User;
use App\Models\Post;
test('authenticated user can create post', function () {
$user = User::factory()->create();
$this->actingAs($user)
->post('/posts', [
'title' => 'My First Post',
'content' => 'Post content here',
])
->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 特定测试模式
数据库测试
use Illuminate\Foundation\Testing\RefreshDatabase;
uses(RefreshDatabase::class);
test('creates post in database', function () {
$user = User::factory()->create();
$this->actingAs($user)
->post('/posts', ['title' => 'Test', 'content' => 'Content']);
$this->assertDatabaseHas('posts', ['title' => 'Test']);
});
授权测试
test('user cannot delete others posts', function () {
$user = User::factory()->create();
$post = Post::factory()->create();
$this->actingAs($user)
->delete("/posts/{$post->id}")
->assertForbidden();
});
API 测试
test('creates post via API', function () {
$user = User::factory()->create();
$this->actingAs($user, 'sanctum')
->postJson('/api/posts', ['title' => 'API Post', 'content' => 'Content'])
->assertCreated();
});
验证清单
- 迁移测试通过
- 模型关系已测试
- 控制器操作已测试
- 验证规则已测试
- 授权已测试
- 数据库状态已验证
- 所有测试均通过
- 已使用 RefreshDatabase
- 已使用工厂
记住
Every Laravel feature → Test exists and failed first
Otherwise → Not TDD
评论
支持 Markdown