【Laravel】DBエラー時のシナリオのテスト
モック以外の方法では意図的に起こすことが難しいタイプの代替コース(雨の日シナリオ)のテスト
PDOをモックする方法を試した
- ConnectionからPDOを引っこ抜き、MockeryでProxy Partial Mockにくるんで再set
\PDO@prepare(string $stmt)
で死ぬようにするMockInterface@with
とMockery::pattern等でクエリを狙い撃ちすることも可能そう
懸念
<?php /** * Set the PDO connection. * * @param \PDO|\Closure|null $pdo * @return $this */ public function setPdo($pdo) { $this->transactions = 0; $this->pdo = $pdo; return $this; }
- 「アクティブなトランザクションの数」がリセットされるため、RefreshDatabaseトレイトに悪影響を及ぼしそうな気がする
- 職場のプロジェクト(L5.5)ではテストケース終了時に制御が戻ってこなくなった
- 自宅のプロジェクト(L6.0)では再現せず。謎