Hello World!
Routing の基礎
問題
GET /hello にアクセスすると、 Hello World! が表示される web アプリを作成してください。
問題は、以下の手順で解いてください。
- Red:小さいテストを作成し、失敗を確認してください
- Green:テストを成功させてください
- Refactor:整理・整頓してください
- 必要に応じて、1から3を繰り返してください
ヒント
便利なアサーションの例
アサーションの調べ方 も合わせてご覧ください。
今回は、以下を使うのではないかと思います。
-
assertStatus($code)(HTTP テスト : HTTP ステータスコードが $code に等しいか)
-
assertSeeText($value)(HTTP テスト : テキストコンテンツに $value が含まれるか)
解答例
続きを読む
実行環境:
- Laravel v13.7.0
- PHP 8.4
- PHPUnit
テスト:
/helloで HTTP ステータスコード200を返すかHello World!を返すか
この問題は、最初の問題なので、特に小さいステップで進めます。
ここまで細かくなくて良いよという方は、 Red2 から読んでください。
Red1: /hello で HTTP ステータスコード200を返すか
いきなり Hello World! の文字列確認を試しても良いのですが、その前段の、 HTTP ステータスコード200(成功)を返すかどうかを、まずはテストしてみます。
Feature テストを作ります。
bash:
php artisan make:test HelloTest
作成されたテストファイルを編集します。
tests/Feature/HelloTest.php:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class HelloTest extends TestCase
{
public function test_レスポンスコードが200(): void
{
$response = $this->get('/hello');
$response->assertStatus(200);
}
}
$response->assertStatus(200); は、最初から書いてあると思うので、編集するのはメソッド名だけです。
test で始めることを忘れないでください。
テストを実行します。
bash:
php artisan test tests/Feature/HelloTest.php
テストが失敗し、赤い表示になることを確認します。
(たくさんエラーが出てきて驚くかもしれませんが、それが普通なので先に進みます。)
Green1
ルーティングを作成します。
routes/web.php:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/hello', fn() => 'この時点では、何を返しても良い');
テストを再度実行します。
bash:
php artisan test tests/Feature/HelloTest.php
テストが成功し、緑色になったことを確認します。
Refactor1
整理するところはありません。
Red2: Hello World! を返すか
無事、/hello が表示されていることが確認できたので、次にその表示されている内容が Hello World! かどうかを判定するテストを書きます。
テストを書き加えます。
tests/Feature/HelloTest.php:
public function test_hello_world(): void
{
$response = $this->get('/hello');
$response->assertStatus(200);
$response->assertSeeText('Hello World!');
}
テストの失敗を確認します。
bash:
php artisan test tests/Feature/HelloTest.php
Green2
ルーティングファイルを書き換えます。
routes/web.php:
Route::get('/hello', fn() => 'Hello World!');
テストの成功を確認します。
bash:
php artisan test tests/Feature/HelloTest.php
全部が緑になった! という達成感を感じてくれたら、うれしいです。
Refactor2
特に整理整頓の必要はありません。
解説
続きを読む
ルーティングについて
ルーティングは、 web アプリの入り口です。
このファイルが、その後の処理の方向づけを決めます。
なお、その web アプリのすべてのルーティングを調べるには、 php artisan route:list というコマンドがあります。
大変便利なコマンドです。
今回は、短い文字列を返すだけでしたが、実際の web アプリでは、そのようなことはほとんど無いだろうと思います。
これから、処理が複雑になっていくので、その書き方を学んでいきます。