Pest PHP 测试框架:完整指南与实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Pest?为什么需要它?

Pest 是一个现代、优雅的 PHP 测试框架,由 Nuno Maduro 于 2021 年创建。与 PHPUnit 等传统方案不同,Pest 提供了更简洁、更具表现力的语法,其灵感来源于 Jest (JavaScript) 和 RSpec (Ruby)。如果说 PHPUnit 是测试界的“瑞士军刀”,那么 Pest 就是一把“手术刀”,让你能更快、更干净地编写测试,大幅减少样板代码。

Pest 的核心目标是让编写测试的过程变得愉悦且直观。你不再需要冗长的类名和方法名,而是使用闭包 (closures) 和流畅接口 (fluent interface)。这对于注重开发速度和代码可读性的项目尤其有用,例如初创公司、API 服务,或者测试不仅由 QA 工程师编写,开发人员也参与其中的团队。

Pest 相较于 PHPUnit 的核心优势:

  • 简洁性: 编写相同测试所需的代码更少。
  • 可读性: 测试代码读起来像自然语言(例如 expect($result)->toBeTrue())。
  • 内置功能: 提供 beforeEach()、afterEach()、todo() 等实用函数。
  • 架构灵活: 无需强制继承 TestCase 类。
  • 生态丰富: 拥有针对 Laravel、Livewire、Mockery 等流行工具的插件。

安装 Pest

Pest 通过 Composer(PHP 的标准包管理器)进行安装。请确保你的 PHP 版本为 8.0 或更高。

创建一个新项目,或进入现有项目的根目录:

mkdir my-pest-project
cd my-pest-project
composer init --yes

将 Pest 安装为开发依赖 (dev):

composer require pestphp/pest --dev

安装完成后,在项目中初始化 Pest:

./vendor/bin/pest --init

此命令将创建基础目录结构:

  • tests/ — 测试文件存放目录。
  • tests/Pest.php — 全局配置文件(例如,用于设置 uses())。
  • phpunit.xml — 配置文件(Pest 运行在 PHPUnit 之上)。

现在,你可以运行测试了:

./vendor/bin/pest

如果你使用 Laravel,建议安装额外的集成包以获得更好体验:

composer require pestphp/pest-plugin-laravel --dev

快速上手:代码示例

创建文件 tests/ExampleTest.php:

<?php

test('basic assertion', function () {
    $result = 1 + 1;
    expect($result)->toBe(2);
});

运行测试:

./vendor/bin/pest

你将看到绿色输出,显示 PASS Tests\ExampleTest。注意:我们没有使用类、注解方法或继承。仅仅是一个 test() 函数和一个闭包。这就是“现代测试”的魅力。

另一种更易读的语法,使用 it 关键字来描述行为:

it('performs basic addition', function () {
    $sum = 2 + 3;
    expect($sum)->toEqual(5);
});

Pest 核心方法与函数详解

以下是 Pest 的 10 个关键方法和函数,包含详细说明和代码示例。

1. test() — 定义测试

功能: 创建一个新的测试。这是定义测试用例的主要函数。

参数:

  • string $description — 测试描述(将在控制台输出)。
  • callable $closure — 包含测试逻辑的闭包。

推荐