Development

Pest PHP คืออะไร? คู่มือ Modern Testing Framework สำหรับ Laravel 11 ที่ SME ไทยควรรู้ 2026

Pest PHP คือ Testing Framework รุ่นใหม่สำหรับ Laravel ที่มี syntax อ่านง่ายแบบ Jest ช่วยให้ทีม SME เขียน Unit Test, Feature Test, Architecture Test ได้เร็วขึ้น 3 เท่า ลด Bug 70% และเพิ่มความมั่นใจก่อนปล่อยขึ้น Production

AF
ADS FIT Team
·9 นาที
Share:
Pest PHP คืออะไร? คู่มือ Modern Testing Framework สำหรับ Laravel 11 ที่ SME ไทยควรรู้ 2026

# 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:

  • Syntax สั้นกว่า PHPUnit 30-50%
  • รองรับ PHPUnit Assertions ทั้งหมด (backward compatible)
  • มี Architecture Testing ในตัว (ตรวจ code quality อัตโนมัติ)
  • Mutation Testing สำหรับวัด quality ของ test suite
  • Parallel Testing built-in
  • Plugin ecosystem ที่เติบโตเร็ว (Livewire, Laravel, Drift, Watch mode)
  • ทำไม 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 ข้อนี้

  • **เริ่มจาก Feature Test ก่อน Unit Test** — ROI สูงกว่า เพราะครอบคลุม flow ได้ทันที
  • **ตั้งเป้า coverage 70-80%** ก่อน ไม่ต้อง 100% เพราะ diminishing return
  • **ใช้ Architecture Test ลบ technical debt** — ตั้ง rule ให้ CI จับ dd(), dump(), N+1
  • **Run parallel ใน CI** — ลด test time จาก 5 นาทีเหลือ 1-2 นาที
  • **Migrate จาก PHPUnit ด้วย drift plugin** — แปลง syntax อัตโนมัติได้ 80%
  • สรุปและขั้นตอนถัดไป

    Pest PHP คือ Testing Framework รุ่นใหม่ที่ควรค่าแก่การย้ายมาใช้อย่างยิ่งสำหรับทีม Laravel ปี 2026 ด้วย syntax ที่สะอาด, feature ที่ครบครัน (Architecture Test + Mutation Test + Parallel) และได้รับการผลักดันจากทีม Laravel โดยตรง

    Key Takeaways:

  • Pest ลด boilerplate 30-50% เทียบกับ PHPUnit
  • มีตั้งแต่ Laravel 11+ เป็น default แล้ว
  • Backward compatible กับ PHPUnit
  • เพิ่ม Architecture Test, Mutation Test, Parallel ในตัว
  • ช่วยให้ทีม SME ส่งงานได้เร็วขึ้นและ bug น้อยลง
  • หากธุรกิจของคุณกำลังพัฒนาระบบด้วย Laravel และต้องการคำปรึกษาเรื่อง Software Quality, Testing Strategy หรือ DevOps pipeline สำหรับทีม SME ไทย ทีมงาน ADS FIT มีประสบการณ์พัฒนาระบบ Laravel ให้ธุรกิจไทยมาแล้วกว่าร้อยระบบ พร้อมให้คำปรึกษาฟรี — [ติดต่อเราที่นี่](https://www.adsfit.co.th) หรืออ่านบทความที่เกี่ยวข้องเพิ่มเติมใน ADS FIT Blog

    Tags

    #Pest PHP#Laravel Testing#PHP Unit Testing#Laravel 11#TDD#Developer Tools

    สนใจโซลูชันนี้?

    ปรึกษาทีม ADS FIT ฟรี เราพร้อมออกแบบระบบที่ฟิตกับธุรกิจของคุณ

    ติดต่อเรา →

    บทความที่เกี่ยวข้อง