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:撰寫測試
- 建立一個測試,檢查訪問
/login
是否返回 200 狀態碼。 - 撰寫功能測試,模擬使用者登入並檢查是否跳轉到
/dashboard
。
練習 2:除錯練習
- 安裝 Laravel Telescope,模擬一個表單提交並查看記錄。
- 使用 Laravel Debugbar 查看某頁面的資料庫查詢時間,優化慢查詢。
教學重點
- 熟悉 Laravel 的測試框架與基本操作。
- 理解如何使用日誌與工具進行高效除錯。
- 掌握 Laravel Telescope 與 Debugbar 的應用,提升開發效率。
本文章以 CC BY 4.0 授權