文章

PHP - 測試與除錯工具


課程簡介

測試與除錯是軟體開發中不可或缺的一部分。在 Laravel 中,提供了強大的測試功能,方便開發者驗證程式碼的正確性與穩定性。此外,Laravel 與多種除錯工具兼容,幫助開發者快速發現與解決問題。本課程將介紹 Laravel 的測試框架與常用的除錯工具。


Laravel 測試基礎

1. 測試類型

Laravel 支援多種測試類型:

  • 單元測試:測試單一類別或方法的功能。
  • 功能測試:測試多個元件的協同工作,例如路由、控制器與資料庫操作。

2. 建立測試

創建測試文件

使用 Artisan 命令創建測試類別:

1
2
php artisan make:test ExampleTest
php artisan make:test UserTest --unit
  • make:test:生成功能測試。
  • --unit:生成單元測試。

測試目錄結構

  • 功能測試tests/Feature
  • 單元測試tests/Unit

3. 撰寫測試

功能測試範例

tests/Feature/ExampleTest.php 中:

1
2
3
4
5
6
7
8
9
10
11
12
13
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;

class ExampleTest extends TestCase
{
    public function test_home_page_is_accessible()
    {
        $response = $this->get('/');

        $response->assertStatus(200);
        $response->assertSee('Laravel');
    }
}

單元測試範例

tests/Unit/UserTest.php 中:

1
2
3
4
5
6
7
8
9
10
use PHPUnit\Framework\TestCase;

class UserTest extends TestCase
{
    public function test_user_full_name()
    {
        $user = new \App\Models\User(['first_name' => 'John', 'last_name' => 'Doe']);
        $this->assertEquals('John Doe', $user->fullName());
    }
}

4. 執行測試

使用以下命令運行測試:

1
php artisan test
  • --filter:只運行指定的測試方法,例如:
    1
    
    php artisan test --filter ExampleTest
    

5. 常用測試方法

  • assertStatus(x):檢查 HTTP 狀態碼。
  • assertSee('text'):檢查響應中是否包含文字。
  • assertDatabaseHas('table', ['column' => 'value']):檢查資料庫是否存在指定資料。
  • assertDatabaseMissing:檢查資料庫是否缺少指定資料。

Laravel 除錯工具

1. 使用 Laravel 日誌

Laravel 的日誌功能可以記錄錯誤與重要事件:

1
2
3
4
use Illuminate\Support\Facades\Log;

Log::info('這是一條資訊日誌');
Log::error('這是一條錯誤日誌');

日誌配置

.env 文件中設定日誌通道:

LOG_CHANNEL=stack

日誌存放於 storage/logs/laravel.log


2. 使用除錯工具

Laravel Telescope

Laravel Telescope 是一個功能強大的除錯工具,幫助監控請求、資料庫查詢、日誌與更多內容。

安裝 Telescope
1
2
3
composer require laravel/telescope
php artisan telescope:install
php artisan migrate
使用 Telescope

訪問 /telescope 查看除錯界面。


Laravel Debugbar

Laravel Debugbar 是一個除錯工具條,可以即時查看頁面的查詢數據、執行時間等資訊。

安裝 Debugbar
1
composer require barryvdh/laravel-debugbar --dev
使用 Debugbar

安裝完成後,除錯工具條將自動顯示在頁面底部。


常見錯誤與解決

1. 500 錯誤

檢查 .env 文件中的 APP_DEBUG 是否設為 true:

APP_DEBUG=true

啟用後,可以看到更詳細的錯誤資訊。


2. 資料庫錯誤

檢查資料庫配置是否正確,並確保資料庫已啟動。

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

教學練習

練習 1:撰寫測試

  1. 建立一個測試,檢查訪問 /login 是否返回 200 狀態碼。
  2. 撰寫功能測試,模擬使用者登入並檢查是否跳轉到 /dashboard

練習 2:除錯練習

  1. 安裝 Laravel Telescope,模擬一個表單提交並查看記錄。
  2. 使用 Laravel Debugbar 查看某頁面的資料庫查詢時間,優化慢查詢。

教學重點

  • 熟悉 Laravel 的測試框架與基本操作。
  • 理解如何使用日誌與工具進行高效除錯。
  • 掌握 Laravel Telescope 與 Debugbar 的應用,提升開發效率。

本文章以 CC BY 4.0 授權