LoginSignup
0
0

laravel PHPUnit Featureテスト データプロバイダー内でconfig関数を呼び出す

Last updated at Posted at 2023-12-18

概要

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のライフサイクルで実行されるためである。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0