概要
Featureテストのデータプロバイダー内部にてlaravelのヘルパ関数であるconfig()
を呼び出そうとして若干詰まったのでまとめる
問題
下記のようなコードをデータプロバイダー内部に記載した。
// 許容値+1の経歴を作成
$invalidHistoriesNum = [];
$historiesAllowedMaxCount = config('user.histories.allowed_max_count');
for ($i = 0; $i < config('user.histories.allowed_max_count'); + 1; $i++) {
$invalidHistoriesNum[] = [
'startYear' => $defaultValidParams['startYear'],
'endYear' => $defaultValidParams['endYear'],
];
}
実行したところ当該のデータプロバイダーを呼び出しているテストがNo tests found
となった。
データプロバイダー内部の処理がイケてないためNo tests found
になる模様だった。
データプロバイダーはPHPUnitのライフサイクルで用意される。
ようはPHPUnitは起動しているけどlaravelがまだ起動していない状態でlaravelのconfig()
ヘルパ関数を実行しているためPHPUnit内でデータプロバイダーの生成がうまくいっていない模様だ。
解決方法
下記のように$this->createApplication();
を追記することで問題は解決した。
$this->createApplication();
// 許容値+1の経歴を作成
$invalidHistoriesNum = [];
$historiesAllowedMaxCount = config('user.histories.allowed_max_count');
for ($i = 0; $i < config('user.histories.allowed_max_count'); + 1; $i++) {
$invalidHistoriesNum[] = [
'startYear' => $defaultValidParams['startYear'],
'endYear' => $defaultValidParams['endYear'],
];
}
余談だがテストクラスのsetUp()
の中で$this->createApplication();
を記載しても問題は解決しない。
これはsetUp()
もPHPUnitのライフサイクルで実行されるためである。
参考文献