什么是 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— 包含测试逻辑的闭包。