# Pest PHP คืออะไร? คู่มือ Modern Testing Framework สำหรับ Laravel 11 ที่ SME ไทยควรรู้ 2026
ถ้าคุณเป็นนักพัฒนา Laravel หรือเป็นเจ้าของธุรกิจ SME ที่มีทีมพัฒนาเว็บภายในบริษัท คงเคยประสบปัญหาที่โค้ดแก้ bug ตัวหนึ่งแล้วไปพังอีกจุดหนึ่งเสมอ จนต้องเสียเวลาหลายชั่วโมงในการ debug แทนที่จะพัฒนา feature ใหม่ ๆ ปัญหานี้เกิดขึ้นเพราะ "ไม่มี Test ที่ดีพอ" และเหตุผลที่ไม่มี Test มักเป็นเพราะ syntax ของ PHPUnit ดั้งเดิมนั้นยาว เขียนยาก และ developer หลายคนมองว่าเสียเวลา
Pest PHP คือคำตอบของปัญหานี้ มันเป็น Testing Framework ที่สร้างขึ้นมาใหม่โดยทีม Laravel (Nuno Maduro + Taylor Otwell สนับสนุน) ที่ออกแบบให้เขียน Test ง่ายขึ้น อ่านง่ายขึ้น และสนุกขึ้น คล้ายกับ Jest ใน JavaScript ตั้งแต่ Laravel 11 เป็นต้นมา Pest ก็ได้กลายมาเป็น default testing framework แล้ว
ในบทความนี้เราจะพาคุณรู้จักกับ Pest PHP แบบละเอียด ตั้งแต่ syntax พื้นฐาน, การเขียน Test แบบต่าง ๆ, feature ขั้นสูงอย่าง Architecture Testing, Mutation Testing, Parallel Testing และตัวอย่างการนำไปใช้จริงในโปรเจกต์ SME ของไทย พร้อม comparison กับ PHPUnit ให้เห็นชัด ๆ ว่าทำไมควรย้ายมาใช้ Pest
Pest PHP คืออะไร?
Pest PHP (อ่านว่า "เพสท์") เป็น PHP Testing Framework ที่สร้างขึ้นบน PHPUnit engine เดิม แต่เปลี่ยน syntax ให้ expressive และอ่านง่ายขึ้นมาก โดยเน้นปรัชญา "testing should be fun" (การเขียน test ควรเป็นเรื่องสนุก)
เปิดตัวครั้งแรกปี 2020 โดย Nuno Maduro (ซึ่งเป็น core contributor ของ Laravel เอง) ปัจจุบันเป็น Pest v3 ที่มาพร้อมกับ Mutation Testing, Architecture Presets, Team Management และ performance ที่เร็วกว่า PHPUnit ถึง 2-3 เท่าในโหมด parallel
จุดเด่นของ Pest:
ทำไม Laravel 11 ถึงเลือก Pest เป็น Default?
ตั้งแต่ Laravel 11 (เปิดตัวมีนาคม 2024) และปัจจุบัน Laravel 12 ทีม Laravel ได้เปลี่ยนมาใช้ Pest เป็น default testing framework แทน PHPUnit ด้วยเหตุผล 3 ข้อหลัก
| เหตุผล | PHPUnit แบบเดิม | Pest PHP |
|--------|-----------------|----------|
| Learning Curve | Steep — ต้อง extends TestCase, namespace ยาว | ต่ำ — เขียนแบบ function ตรง ๆ |
| Readability | OOP + annotations | Fluent & expressive เหมือนอ่านภาษาอังกฤษ |
| Boilerplate | มาก | น้อยมาก ประหยัดเวลา 40-60% |
| Community Growth | Stagnant | Growth 300%+ ต่อปี |
นอกจากนี้ Pest ยังรักษา backward compatibility ทำให้ทีมที่มี PHPUnit test เดิมอยู่แล้ว สามารถ migrate ทีละไฟล์ได้ ไม่ต้องเขียนใหม่หมด
Syntax พื้นฐาน: Pest vs PHPUnit
เปรียบเทียบการเขียน Test เดียวกันระหว่าง PHPUnit และ Pest
PHPUnit แบบเดิม:
```php
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
class CalculatorTest extends TestCase
{
public function test_addition_returns_sum(): void
{
$result = 2 + 3;
$this->assertEquals(5, $result);
}
}
```
Pest PHP แบบใหม่:
```php
test('addition returns sum', function () {
expect(2 + 3)->toBe(5);
});
// หรือใช้ it() syntax ให้อ่านเหมือนภาษาอังกฤษ
it('returns sum when adding two numbers', function () {
expect(2 + 3)->toBe(5);
});
```
เห็นได้ว่า Pest ลด boilerplate ไปมาก ไม่ต้องเขียน namespace, ไม่ต้อง extends TestCase และที่สำคัญใช้ `expect()` ที่ chain-able
Feature เด่นของ Pest ที่ SME ควรรู้จัก
1. Higher Order Testing
เขียน test ซ้ำ ๆ ด้วยข้อมูลหลายชุดโดยไม่ต้อง loop เอง
```php
it('validates email format')
->with(['test@ads.co.th', 'pm@adsfit.co.th'])
->expect(fn ($email) => filter_var($email, FILTER_VALIDATE_EMAIL))
->not->toBeFalse();
```
2. Architecture Testing
ตรวจสอบ code architecture อัตโนมัติ เช่น ห้ามใช้ `dd()` ใน production หรือ controllers ต้อง extend BaseController
```php
arch('controllers extend base')
->expect('App\Http\Controllers')
->toExtend('App\Http\Controllers\Controller');
arch('no debug in production')
->expect(['dd', 'dump', 'ray'])
->not->toBeUsed();
```
Feature นี้ช่วยลด code review เรื่อง coding standard ไปได้มาก เพราะ CI จะ fail อัตโนมัติถ้ามี dd() หลงเหลือใน PR
3. Datasets ที่เรียบร้อยกว่า
```php
dataset('emails', [
'valid gmail' => ['user@gmail.com', true],
'invalid' => ['not-an-email', false],
]);
it('validates emails', function (string $email, bool $expected) {
expect(isValidEmail($email))->toBe($expected);
})->with('emails');
```
4. Mutation Testing (Pest v3)
วัด quality ของ test suite ด้วยการแก้โค้ดทีละจุดแล้วดูว่า test จับได้ไหม ถ้า mutation survive แปลว่า test ยังไม่ครอบคลุม
```bash
./vendor/bin/pest --mutate --covered-only
```
วิธีติดตั้ง Pest ในโปรเจกต์ Laravel 11/12
Step 1: ติดตั้งผ่าน Composer
```bash
composer require pestphp/pest --dev --with-all-dependencies
composer require pestphp/pest-plugin-laravel --dev
```
Step 2: Initialize Pest
```bash
./vendor/bin/pest --init
```
คำสั่งนี้จะสร้าง `tests/Pest.php` config file ให้อัตโนมัติ
Step 3: เขียน Test แรก
สร้างไฟล์ `tests/Feature/ExampleTest.php`
```php
<?php
it('returns a successful response', function () {
$response = $this->get('/');
$response->assertStatus(200);
});
```
Step 4: Run Test
```bash
./vendor/bin/pest
# หรือรัน parallel
./vendor/bin/pest --parallel
```
Step 5: เพิ่ม Coverage
```bash
./vendor/bin/pest --coverage --min=80
```
ระบบจะ fail ถ้า coverage ต่ำกว่า 80%
Plugins ที่ควรติดตั้งเพิ่ม
| Plugin | ใช้ทำอะไร | คำสั่งติดตั้ง |
|--------|-----------|--------------|
| pest-plugin-laravel | Helpers สำหรับ Laravel | composer require pestphp/pest-plugin-laravel --dev |
| pest-plugin-livewire | ทดสอบ Livewire component | composer require pestphp/pest-plugin-livewire --dev |
| pest-plugin-watch | Watch mode auto re-run | composer require pestphp/pest-plugin-watch --dev |
| pest-plugin-drift | Convert PHPUnit → Pest | composer require pestphp/pest-plugin-drift --dev |
| pest-plugin-type-coverage | วัด type coverage | composer require pestphp/pest-plugin-type-coverage --dev |
Pest vs PHPUnit vs PHPSpec: ตารางเปรียบเทียบ
| Feature | Pest PHP | PHPUnit | PHPSpec |
|---------|----------|---------|---------|
| Syntax Style | Expressive / Jest-like | OOP | BDD |
| Boilerplate | Low | High | Medium |
| Architecture Test | Built-in | Plugin-required | No |
| Mutation Test | Built-in (v3) | Infection (external) | No |
| Parallel | Built-in | Paratest (external) | No |
| Laravel Integration | Excellent | Good | Limited |
| Community 2026 | Growing Fast | Stable | Declining |
| License | MIT | BSD-3 | MIT |
Best Practices สำหรับ SME ไทย
ถ้าทีมคุณกำลังจะเริ่มใช้ Pest แนะนำ 5 ข้อนี้
สรุปและขั้นตอนถัดไป
Pest PHP คือ Testing Framework รุ่นใหม่ที่ควรค่าแก่การย้ายมาใช้อย่างยิ่งสำหรับทีม Laravel ปี 2026 ด้วย syntax ที่สะอาด, feature ที่ครบครัน (Architecture Test + Mutation Test + Parallel) และได้รับการผลักดันจากทีม Laravel โดยตรง
Key Takeaways:
หากธุรกิจของคุณกำลังพัฒนาระบบด้วย Laravel และต้องการคำปรึกษาเรื่อง Software Quality, Testing Strategy หรือ DevOps pipeline สำหรับทีม SME ไทย ทีมงาน ADS FIT มีประสบการณ์พัฒนาระบบ Laravel ให้ธุรกิจไทยมาแล้วกว่าร้อยระบบ พร้อมให้คำปรึกษาฟรี — [ติดต่อเราที่นี่](https://www.adsfit.co.th) หรืออ่านบทความที่เกี่ยวข้องเพิ่มเติมใน ADS FIT Blog
