作成日:2025-04-11, 更新日:2025-04-17
サンプル
- ファイルごとにコメントを出力する。メソッドごとにコメントも出力したいんだけど、諦めた
- 頻繁に使うログインの処理も継承元にセットしておく
▼テストの結果の出力例
> php artisan test ==== ログインページ ==== PASS Tests\Feature\LoginControllerTest ✓ view dashboard ==== 履歴ページ ==== PASS Tests\Feature\HistoryControllerTest ✓ view history Tests: 3 passed Time: 1.60s
継承元
▼tests/TestBase/HogeTestCase.php
<?php
namespace Tests\TestBase;
use Tests\TestCase;
class HogeTestCase extends TestCase
{
private static array $flg_HeadCom_many = [];
protected static $header_comment = null; // 各テストファイルで設定
protected function setUp(): void {
parent::setUp();
$class = static::class;
if (!isset(self::$flg_HeadCom_many[$class]) && static::$header_comment) {
fwrite(STDOUT, "\n==== " . static::$header_comment . " ====\n");
self::$flg_HeadCom_many[$class] = true;
}
}
protected function login(array $credentials = []) {
// =============================
// 処理に使う各値たち
// 無視したいミドルウェア
$middleware_many = array(
\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class,
// \App\Http\Middleware\●●●::class,
);
// 渡したい値
$default = [
'memberid' => 'user@example.com',
'password' => 'secret',
'_token' => csrf_token(),
];
$data = array_merge($default, $credentials);
// 実行するURL
$path = route('login_do');
// =============================
// 処理実行+結果。問題があれば、即終了
$response = $this->withoutMiddleware($middleware_many)->post($path, $data); // 任意のミドルウェアを無視+post送信
$response->assertRedirect(route('mypage_dashboard')); // もしくは assertStatus(302)
}
}
各テストファイル
▼tests/Feature/LoginControllerTest.php
<?php
namespace Tests\Feature\Mypage;
use Tests\TestBase\MypageTestCase;
class LoginControllerTest extends MypageTestCase {
protected static $header_comment = 'ログインページ';
public function test_view_dashboard() {
// =============================
// ログイン
$data = array(
// 'memberid' => 'user@example.com',
// 'password' => 'secret',
);
$this->login($data);
// =============================
// ダッシュボードを表示
$path = route('mypage_dashboard');
$response = $this->get($path);
// =============================
// 結果の確認: assert●●●()たち
$response->assertStatus(200);
}
}
メソッドを日本語化: @test
一番わかりやすいと思う...けど複数人でやるときの運用ルールを決めるのが面倒そう
▼「test_view_dashboard()」を実行したとき。日本語化前
PASS Tests\Feature\LoginControllerTest ✓ view dashboard
▼下記のように日本語化したい
PASS Tests\Feature\LoginControllerTest ✓ ダッシュボードを表示
対象となるメソッドを日本語化
「@test」を使えば、メソッド名を日本語にして良いとのこと
/**
* @test
*/
public function ダッシュボードを表示() {}
特定のテストだけまとめて実行: @group
「@group」を設定して、実行時に指定ってのが可能
処理として「重要なもののみ」、「DBが絡む処理のみ」など目的ごとにまとめることが可能
テストファイルの各メソッド
// 省略
/**
* @group abc
*/
public function test_view_1st() {
// 省略
}
public function test_view_2nd() {
// 省略
}
/**
* @group abc
*/
public function test_view_3rd() {
// 省略
}
// 省略
グループを指定して実行
▼「@group abc」を設定したメソッドのみ実行
> php artisan test --group=abc