关于 pest-testing
Pest Testing 4 是面向使用 Pest 4 的 Laravel 项目的测试技能,适用于创建、修改和调试测试的开发者。它涵盖单元、功能、浏览器、冒烟、视觉回归、分片和架构测试实践。
主要功能
- 01指导创建与组织 Pest 测试
- 02提供测试运行命令与断言建议
- 03涵盖浏览器和冒烟测试
- 04支持视觉回归与测试分片
- 05包含架构测试实践
适用场景
- 01为 Laravel 功能编写测试
- 02调试失败测试或调整现有测试
- 03验证浏览器页面和交互
- 04并行运行测试或检查架构约束
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ spatie/ freek.dev --skill pest-testing安装后在 Claude Code 中输入/pest-testing确认已加载。
详细介绍
Pest Testing 4
适用场景
在以下情况下启用此技能:
- 创建新测试(单元测试、功能测试或浏览器测试)
- 修改现有测试
- 调试测试失败
- 进行浏览器测试或冒烟测试
- 编写架构测试或视觉回归测试
文档
使用 search-docs 查找详细的 Pest 4 模式和文档。
基本用法
创建测试
所有测试都必须使用 Pest 编写。使用 php artisan make:test --pest {name}。
测试组织
- 单元测试/功能测试:
tests/Feature和tests/Unit目录。 - 浏览器测试:
tests/Browser/目录。 - 未经批准,不要删除测试——这些是应用程序的核心代码。
基本测试结构
it('is true', function () { expect(true)->toBeTrue(); });
运行测试
- 定稿前使用筛选器运行最少量的测试:
php artisan test --compact --filter=testName。 - 运行所有测试:
php artisan test --compact。 - 运行单个文件:
php artisan test --compact tests/Feature/ExampleTest.php。
断言
使用具体的断言(assertSuccessful()、assertNotFound()),而不是 assertStatus():
it('returns all', function () { $this->postJson('/api/docs', [])->assertSuccessful(); });
| 使用 | 替代 |
|---|---|
assertSuccessful() | assertStatus(200) |
assertNotFound() | assertStatus(404) |
assertForbidden() | assertStatus(403) |
模拟
使用前导入 mock 函数:use function Pest\Laravel\mock;
数据集
对重复性测试(如验证规则)使用数据集:
it('has emails', function (string $email) { expect($email)->not->toBeEmpty(); })->with([ 'james' => '[email protected]', 'taylor' => '[email protected]', ]);
Pest 4 功能
| 功能 | 用途 |
|---|---|
| 浏览器测试 | 在真实浏览器中进行完整的集成测试 |
| 冒烟测试 | 快速验证多个页面 |
| 视觉回归 | 比较屏幕截图以检测视觉变化 |
| 测试分片 | 并行运行 CI |
| 架构测试 | 强制执行代码规范 |
浏览器测试示例
浏览器测试在真实浏览器中运行,以进行完整的集成测试:
- 浏览器测试位于
tests/Browser/。 - 使用 Laravel 功能,如
Event::fake()、assertAuthenticated()和模型工厂。 - 使用
RefreshDatabase,确保每项测试都有干净的状态。 - 与页面交互:点击、输入、滚动、选择、提交、拖放和触摸手势。
- 如有要求,在多种浏览器(Chrome、Firefox、Safari)中测试。
- 如有要求,在不同设备/视口(iPhone 14 Pro、平板电脑)上测试。
- 适时切换配色方案(浅色/深色模式)。
- 截取屏幕截图或暂停测试以进行调试。
it('may reset the password', function () { Notification::fake();
$this->actingAs(User::factory()->create());
$page = visit('/sign-in');
$page->assertSee('Sign In')
->assertNoJavascriptErrors()
->click('Forgot Password?')
->fill('email', '[email protected]')
->click('Send Reset Link')
->assertSee('We have emailed your password reset link!');
Notification::assertSent(ResetPassword::class);
});
冒烟测试
快速验证多个页面没有 JavaScript 错误:
$pages = visit(['/', '/about', '/contact']);
$pages->assertNoJavascriptErrors()->assertNoConsoleLogs();
视觉回归测试
截取并比较屏幕截图,以检测视觉变化。
测试分片
将测试拆分到多个并行进程中,加快 CI 运行。
架构测试
Pest 4 包含架构测试(继承自 Pest 3):
arch('controllers') ->expect('App\Http\Controllers') ->toExtendNothing() ->toHaveSuffix('Controller');
常见陷阱
- 使用 mock 前未导入
use function Pest\Laravel\mock; - 使用
assertStatus(200)而不是assertSuccessful() - 忘记为重复的验证测试使用数据集
- 未经批准就删除测试
- 忘记在浏览器测试中使用
assertNoJavascriptErrors()