mcpField
P
pest-testing

pest-testing

github.com/coollabsio测试与质量65.3k56 次安装今天更新
代码仓库

关于 pest-testing

为 Laravel 项目提供 Pest 4 测试编写与运行规范,涵盖单元、功能和浏览器测试,以及 Pest 4 的相关能力。

主要功能

  1. 01测试创建与目录规范
  2. 02Pest 测试风格和断言
  3. 03数据集与模拟指引
  4. 04浏览器与冒烟测试
  5. 05视觉回归与测试分片
  6. 06架构测试

适用场景

  1. 01按项目规范编写 Laravel 测试
  2. 02检查页面的 JavaScript 或控制台错误
  3. 03比较截图以发现视觉变化
  4. 04在 CI 进程间拆分测试

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/coollabsio/coolify --skill pest-testing

安装后在 Claude Code 中输入/pest-testing确认已加载。

详细介绍

Pest Testing 4

文档

如需了解 Pest 4 的详细模式和文档,请使用 search-docs。

基本用法

创建测试

所有测试都必须使用 Pest 编写。使用 php artisan make:test --pest {name}。

{name} 参数应仅包含路径和测试名称,不应包含测试套件。

  • 错误:php artisan make:test --pest Feature/SomeFeatureTest 会生成 tests/Feature/Feature/SomeFeatureTest.php
  • 正确:php artisan make:test --pest SomeControllerTest 会生成 tests/Feature/SomeControllerTest.php
  • 错误:php artisan make:test --pest --unit Unit/SomeServiceTest 会生成 tests/Unit/Unit/SomeServiceTest.php
  • 正确:php artisan make:test --pest --unit SomeServiceTest 会生成 tests/Unit/SomeServiceTest.php
测试组织
  • 单元/功能测试:tests/Feature 和 tests/Unit 目录。
  • 浏览器测试:tests/Browser/ 目录。
  • 未经批准,切勿删除测试——这些是应用的核心代码。
基本测试结构

Pest 支持 test() 和 it() 函数。编写新测试前,请检查同一目录中的现有测试文件,以遵循项目惯例。如果现有测试使用 test(),就使用 test();如果使用 it(),就使用 it()。

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)

模拟

使用前导入模拟函数: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');

常见问题

  • 使用模拟前未导入 use function Pest\Laravel\mock;
  • 使用 assertStatus(200) 而不是 assertSuccessful()
  • 忘记为重复的验证测试使用数据集
  • 未经批准删除测试
  • 忘记在浏览器测试中使用 assertNoJavaScriptErrors()
  • 使用 make:test 时,在 {name} 前加上 Feature/ 或 Unit/ 前缀

评论

支持 Markdown