概要
同時に使っていたら少しずつ違って混乱したので、メモ
環境
- laravel 6.7.0 / PHPUnit 8.5.0
- laravel 5.8 / PHPUnit 7.5
をそれぞれ使い比べた
特定の環境下のみでテストは実行したい
setUpBeforeClassに定義する。
実行順からして、setUpBeforeClass内では一手間(後述)加えないとlaravelのヘルパーは使えない。
との話でしたが、 laravel 6.7 / PHPUnit 8.5 では問題ありませんでした。
laravel6、またはPHPUnit8から仕様が変わっているのではと思います。
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
if (config('app.env') === 'local') {
// ごにょごにょ
}
}
dataProviderでEloquentなどlaravelの機能使いたい
dataProviderはsetUpBeforeClassよりも先に実行されるためlaravelのクラス等が使用出来ないので一手間使う。
こちらは laravel 6.7 / PHPUnit 8.5 でもエラーが発生した。
laravelの初期化を行うメソッドを実行するか、
public function addProvider()
{
$this->refreshApplication();
}
クロージャ内ならば実行出来る。
public function addProvider()
{
return [
'test1' => function() {
return Article::all();
},
'test2' => function() {
return Article::all();
}
]
}