mcpField
P
pest-testing

pest-testing

github.com/spatie测试与质量648719 次安装3 天前更新
代码仓库

关于 pest-testing

Pest Testing 4 是面向使用 Pest 4 的 Laravel 项目的测试技能,适用于创建、修改和调试测试的开发者。它涵盖单元、功能、浏览器、冒烟、视觉回归、分片和架构测试实践。

主要功能

  1. 01指导创建与组织 Pest 测试
  2. 02提供测试运行命令与断言建议
  3. 03涵盖浏览器和冒烟测试
  4. 04支持视觉回归与测试分片
  5. 05包含架构测试实践

适用场景

  1. 01为 Laravel 功能编写测试
  2. 02调试失败测试或调整现有测试
  3. 03验证浏览器页面和交互
  4. 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()

评论

支持 Markdown