用 PHPUnit 写测试,样板多、断言读起来像机器话,团队越来越不爱写测试。Pest 的出发点:用更接近自然语言的语法(expect($x)->toBe(1))与极简 API,把测试写成了“读起来舒服”的事,从而提升测试覆盖率与可维护性。

项目基本信息

信息项详情
项目名称pest
GitHub地址https://github.com/pestphp/pest
项目描述富有表现力、以开发者体验为先的 PHP 测试框架
作者pestphp
开源协议MIT License
开源状态公开
Languages—
支持平台Windows / macOS / Linux
最后更新2026-11-01

一、项目介绍

pestphp/pest 是一个以开发者体验(DX)为核心的 PHP 测试框架,构建在 PHPUnit 之上,MIT 协议。它用 expect() 表达式语法、描述式测试名与插件系统(覆盖率、归档、看板、玩笑测试等)降低写测试的心智负担,同时完全兼容 PHPUnit。Pest 支持平行测试、架构测试、突变测试等高级能力,是 Laravel 生态的默认测试框架之一。

二、核心优势

  1. 语法甜:expect()->toBe() 表达式,读起来像句子。
  2. 兼容 PHPUnit:底层基于 PHPUnit,旧用例可渐进迁移。
  3. 插件丰富:覆盖率、归档、看板、玩笑测试等扩展。
  4. 高级测试:平行测试、架构测试、突变测试开箱支持。
  5. 跨平台:PHP 应用,Windows / macOS / Linux 通用。

三、适用场景

  • 给 PHP/Laravel 项目写可读、好维护的测试。
  • 团队提升测试覆盖率与测试文化。
  • 需要架构测试与突变测试保障质量。
  • 从 PHPUnit 渐进迁移到更顺手的语法。

四、安装教程

用 Composer 引入(以 Laravel 为例):

composer require pestphp/pest --dev
./vendor/bin/pest --init

常见报错:未加 --dev 会导致生产依赖污染;PHP 版本不满足框架要求时请升级。

五、使用示例

写一个测试:

test('基本算术', function () {
    expect(1 + 1)->toBe(2);
});

test('字符串包含', function () {
    expect('hello')->toContain('ell');
});

运行:

./vendor/bin/pest

真实效果:pest 把断言写成链式表达式,描述式测试名让报告像文档;--parallel 可并行跑,--mutation 做突变测试,从“能跑”升级到“测得到位”。

六、常见问题

Q:Pest 能替代 PHPUnit 吗?
A:它构建在 PHPUnit 之上,兼容其生态,可视为更顺手的语法层。
Q:Laravel 默认测试框架是它吗?
A:是,Laravel 官方脚手架默认接入 Pest。
Q:协议允许商用吗?
A:MIT,允许商用与修改,需保留版权与许可声明。

七、总结

Pest 用富有表现力的语法与出色 DX 重写了 PHP 测试的体验,在兼容 PHPUnit 的同时显著降低写测试的门槛。对想提升测试文化与覆盖率的 PHP 团队,它是当下最推荐的选择;MIT 协议,Laravel 默认集成。