こんにちは、PHP開発者の皆さん!この連載の第8回では、Laravel 10を使ってAPIのテストとデバッグを行う方法について詳しく解説します。APIの品質を保ち、バグを迅速に発見して修正するためには、テストとデバッグが不可欠です。それでは、始めましょう!
1. PHPUnitによるテストの設定
Laravelでは、PHPUnitを使用してテストを実行します。テストの設定は、phpunit.xml
ファイルで行います。
PHPUnitのインストール
LaravelプロジェクトにはデフォルトでPHPUnitが含まれていますが、念のためにインストールしておきましょう。
./vendor/bin/sail composer require --dev phpunit/phpunit
Bash2. ユニットテストの作成
ユニットテストは、個々のメソッドや機能をテストするためのものです。ここでは、モデルのメソッドをテストする例を示します。
モデルのテスト
例えば、Post
モデルのテストを作成しましょう。
namespace Tests\Unit;
use Tests\TestCase;
use App\Models\Post;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostTest extends TestCase
{
use RefreshDatabase;
public function test_title_is_required()
{
$post = Post::factory()->make(['title' => null]);
$this->assertFalse($post->save());
}
}
PHPこのテストでは、タイトルがnullの場合、保存が失敗することを確認しています。
3. フィーチャーテストの作成
フィーチャーテストは、アプリケーションの特定の機能が期待通りに動作するかをテストします。ここでは、APIエンドポイントのテストを行います。
APIエンドポイントのテスト
例えば、投稿の取得エンドポイントをテストします。
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Post;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostApiTest extends TestCase
{
use RefreshDatabase;
public function test_can_fetch_single_post()
{
$user = User::factory()->create();
$post = Post::factory()->create(['user_id' => $user->id]);
$response = $this->getJson("/api/posts/{$post->id}");
$response->assertStatus(200)
->assertJson([
'data' => [
'id' => $post->id,
'title' => $post->title,
'body' => $post->body,
],
]);
}
public function test_can_fetch_all_posts()
{
$user = User::factory()->create();
$posts = Post::factory()->count(3)->create(['user_id' => $user->id]);
$response = $this->getJson('/api/posts');
$response->assertStatus(200)
->assertJsonStructure([
'data' => [
'*' => ['id', 'title', 'body'],
],
]);
}
}
PHPこのテストでは、投稿の取得とすべての投稿の取得が期待通りに動作することを確認しています。
4. テストの実行
テストは以下のコマンドで実行します。
./vendor/bin/sail artisan test
Bashもしくは、特定のテストファイルだけを実行することもできます。
./vendor/bin/sail artisan test --filter PostApiTest
Bash5. デバッグの設定
テスト中にバグを見つけた場合、デバッグツールを使用して問題を特定できます。Laravelでは、Xdebugなどのデバッグツールを使用できます。
Xdebugのインストール
Docker環境でXdebugをインストールするには、docker-compose.yml
ファイルに以下を追加します。
services:
laravel.test:
build:
context: .
dockerfile: ./docker/8.1/Dockerfile
args:
...
INSTALL_XDEBUG: 1
...
YAMLその後、Xdebugを有効にするためにDockerコンテナを再ビルドします。
./vendor/bin/sail build --no-cache
./vendor/bin/sail up -d
BashXdebugの設定
次に、Xdebugの設定を行います。php.ini
ファイルに以下の設定を追加します。
[xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
INIこれで、VSCodeなどのIDEでデバッグセッションを開始できます。
6. デバッグの使用
ブレークポイントの設定
IDEでブレークポイントを設定し、コードの実行を一時停止して変数の値を確認できます。例えば、投稿の取得エンドポイントにブレークポイントを設定し、リクエスト処理の流れを確認します。
デバッグセッションの開始
デバッグセッションを開始するには、IDEのデバッグツールを使用します。VSCodeでは、Run
メニューから Start Debugging
を選択します。
7. まとめ
この記事では、Laravel 10を使ってAPIのテストとデバッグを行う方法について解説しました。テストを通じてAPIの品質を保証し、デバッグツールを使用してバグを迅速に発見して修正する方法を学びました。次回は、APIのパフォーマンスチューニングについて学びます。それでは、次の記事でお会いしましょう!
次の記事: 第9回 パフォーマンスとセキュリティの向上
コメント