PHPフレームワーク Laravel実践開発 6章 メモ
Chapter 6 ユニットテスト
6-1 コントローラーのテスト
- テスト関連ファイル説明
- phpunit.xml 説明
- Unit/Feature 説明
- テスト実行方法: $vendor/bin/phpunit
- Exampleソースの説明
- コントローラーテスト
- テストメソッド: assertXxx() 説明
6-2 モデルのテスト
- テスト用DB準備、設定追加: config/database.php: connections => [ 'testing' => [] ]
- マイグレーション作成
- マイグレーション適用
- $ artisan migrate:refresh --database=testing
- シーディング作成
- シーディング実行
- $ artisan db:seed --database=testing
- モデルテスト
- tests/Feature/ExacpleTest.php へ記述
- $this->assertDatabaseHas('<model-name>', $data), $this->assertDatabaseMissing('<model-name>', $data),
- データベースを初期状態に戻す: use RefreshDatabase; // テストクラス内に記述
- シードを利用し初期データ投入
- $this->seed(DatabaseSeeder::class);
- tests/Feature/ExacpleTest.php へ記述
6-3 ファクトリの利用
- ファクトリ作成
- ファクトリ定義
- Model を書き換え、レコード生成部分を追記
- ファクトリメソッドを概観
- ファクトリを使ったテストコード記述
- ステートを利用する
- ファクトリへステート呼び出しを追加する
- afterMaking, afterCreating, afterMakingState, afterCreatingState を利用する
- ファクトリへ追記
- make はモデルの作成
- create はモデルが永続化される
6-4 モックの活用
- ジョブのテスト
- 実際のキューに影響を与えないように、Bus::fake() で、フェイク機能を起動する
- ジョブがディスパッチされたことの確認
- Bus::assertDispatched( ジョブクラス );
- ジョブがディスパッチされていないことの確認
- Bus::assertNotDispatched( ジョブクラス );
- ディスパッチされたジョブの確認は、クロージャで行う
- Bus::assetDispatched(ジョブクラス、function ($job) { / これが true を返せば、テスト通過 / });
- イベントのテスト
- キューのテスト
- キューのフェイク機能
- Queue::fake()
- 指定のジョブが追加されていることを確認
- Queue::assertPushed( ジョブクラス )
- 指定のジョブが追加されていないことを確認
- Queue::assertNothingPushed( ジョブクラス )
- 名前付きキューでジョブが追加されていることを確認
- Queue::assertPushed( 名前, ジョブクラス )
- キューのフェイク機能
- サービスのテスト