こんにちは!とびろぐ管理人のとびうおです。
今回はLaravel10にて、簡単にテストを書く方法について詳しく解説していきたいと思います!
今回はあるエンドポイントに対して、
リクエストを送った際に期待するページが
レスポンスされるかどうかという
テストを書いていくよ!
前提
まず今回テストするのはすごい簡単なページです。
http://localhost/hello にアクセスするとhelloというページが返ってくるというページです。
<web.php>
<HelloController>
<hello.blade.php>
このくらい簡単な方が、
テストを書きやすいでしょ?
実際にテストを書いてみる
余談
では、ここで testを書いてみましょう。
./vendor/bin/sail php artisan test
と試しに打つと、
24 passedって!
この前の記事で入れたbreezeってテストまで書いてくれるのか…
まあ、それは置いておいて、実際にテストを書いてみましょう
本題
今回はhelloControllerのテストを書くので、以下のコマンドでテストファイルを作成します。
./vendor/bin/sail php artisan make:test HelloControllerTest
ローカルの方は↓でどうぞ
php artisan make:test HelloControllerTest
そうすることで、
無事、HelloControllerTestが作成されましたね。
そしたらここにテストを書いていきましょう。
HelloControllerの中身を見てみると親切なことに例が書いてありますね。
そこで、16行目を以下のように書き換えてみます
16行目を
$response = $this->get('/hello');
にしてみました。
再度ここで
./vendor/bin/sail php artisan test
を打つと、無事HelloControllerTestが成功していることが分かりますね。
より綺麗に書いてみる
これだけでも /hello というエンドポイントにアクセスした際に200が返ってくるというテストはかけましたが、もう少し詳しく、かつ便利に書いていきたいですね。
なので以下のように書き換えていきます。
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class HelloControllerTest extends TestCase
{
private string $route_hello;
private string $view_hello;
public function setUp(): void
{
parent::setUp();
$this->route_hello = route('hello');
$this->view_hello = 'hello'; //ここはviewの名前を書く
}
public function test_response_hello(): void
{
$response = $this->get($this->route_hello);
$response->assertViewIs($this->view_hello);
}
}
このように書いて、再度実行してみると
ちゃんと成功していることがわかります。
なぜこのように書くのか
では、1つ目のコードと2つ目のコードを比較してみましょう。
右の方が長くて書くのが面倒くさそう…と思おうかもしれません。
しかし、右のコードは今後、urlが変わった際も対応できますし、しっかりviewが返ってきているのかというところまでテストできます。
せっかくテストを書くなら、
丁寧に書こう!
まとめ
Laravel10ではかなり簡単にテストを書くことができます!
ぜひ、みなさんもエンドポイントとレスポンスくらいのテストは書いて、安心して開発をしてみてはいかがでしょうか?
が、頑張ってテスト書くもん!
その他の記事
とびろぐではこれ以外にもLaravelの記事を多く書いています!
ぜひみてみてください!
コメント