【Laravel】PHPUnitでのテスト
マイグレーションファイルをテストする
まずはテスト用のDBを作る
kir_thread_test
kir_threadのテーブル全部exportして読み込ませた
.env.testingを作る
指定のenvを対象にmigrateを起こせる
php artisan migrate --seed --env=testing
シーダーがあればこう書くが、なかったらいらない
普通の.envに反映されてしまった
php artisan migrate:rollbackと、php artisan migrate:rollback --env=testingした
config:cacheしてもっかい
code:console
php artisan migrate:status
| Yes | 2021_06_12_170656_add_columns_to_posts_reaction | 2 |
| Yes | 2021_06_12_173333_create_reactions_table | 2 |
| Yes | 2022_01_06_205225_add_columns_to_posts_youtube_url | 3 |
| No | 2022_03_31_231430_change_columns_to_posts_message | |
+------+----------------------------------------------------+-------+
php artisan migrate:status --env=testing
| Yes | 2021_06_12_173333_create_reactions_table | 2 |
| Yes | 2022_01_06_205225_add_columns_to_posts_youtube_url | 3 |
| No | 2022_03_31_231430_change_columns_to_posts_message | |
+------+----------------------------------------------------+-------+
今のところどちらも同じ
一応php artisan config:cache --env=testingもした。
これはどの.envを読み込ませるかを指定している?
code:console
php artisan migrate --env=testing
Migrating: 2022_03_31_231430_change_columns_to_posts_message
Migrated: 2022_03_31_231430_change_columns_to_posts_message (0.02 seconds)
testの方だけmigrateが動作してる!
テストするときは、php artisan config:cache --env=testingしてから行うと言う流れになるのだろうか
ローカルの正しい.envでmigrateを行うときは、以下の手順が必要
php artisan config:cache //正しい.envを読み込ませる
php artisan migrate
controller,Modelsのテストを作ってみる
LaravelにPHPUnitは標準搭載らしい
試しにusersテーブルをテストするプログラムを作る
php artisan make:test UserTest
/tests/Feature/UserTest.phpというファイルができる
code:php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
class UserTest extends TestCase
{
public function testExample()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}
./vendor/bin/phpunitで実行できる
各エラーの違い
code:console
# 普通のエラー テストの文法が間違っている
ERRORS!
Tests: 3, Assertions: 2, Errors: 1.
# テスト失敗
FAILURES!
Tests: 3, Assertions: 3, Failures: 1.
# 成功(期待した値と、実際の値が正しい)
OK (3 tests, 3 assertions)
https://scrapbox.io/files/62501eb1e598760023cf03fa.png
特定のテストだけ実行する
./vendor/bin/phpunit -v tests/Feature/UserTest.phpみたいな感じ
PHPUnitのファイル構造について
https://scrapbox.io/files/6250205a3ca75e001db44c2d.png
Unit
一番粒度が細かいテスト。
Feature
粒度が少し大きいテスト。Controllerなどに使うらしい。
BrowserTest
自分でフォルダ作って配置するっぽい。
実際にブラウザを使って画面にリクエスト、 ボタンをクリックとかのテストをコードで実行するために使う
コマンドで作成するときは以下で配置ディレクトリを指定できる
php artisan make:test UserTest --unit
unitで作り直してみた
エラーCall to a member function connection() on null
初期で記入されている以下を書き換えればいいらしい
code:UserTest.php
// use PHPUnit\Framework\TestCase;
use Tests\TestCase; // こっちを参照させる
アサーション関数などのまとめ
220331_change_columnブランチで変更した仕様をテストするプログラムを作ってみる
変えた内容(テストすべき内容?)
messageの最大文字数を255に
nullableに
以下の流れでやった
正しいenvをcacheしてmigrate
テスト作成
php artisan make:test Post/messageColumnTest --unit
tests/Unit/Post/messageColumnTest.phpができる
まずは動くテストを作る
終わったら./vendor/bin/phpunit -v tests/Unit/Postでグリーン確認
マイグレーションテスト
phpunit.xmlをテストの環境に書き換える
php artisan migrate:rollback --env=testing
php artisan migrate --env=testingなどをする
php artisan make:test Database/DatabaseTestでテストを作る
DBに保存される処理とかを作ってテスト
RefreshDatabaseトレイトをuseしておくと、テスト後に DBに影響が起きない
DBの中のカラム全部消えるので、書くならテスト用DBに繋いでやること
コントローラの動作チェック
use App\Http\Controllers\PostController;と記述してテスト内で呼べるようにする