Posted at

Laravelのテストメソッド毎にconfigを設定する

テスト対象のコードの中に、configを取得して使用するコードがある場合の対応方法


テストごとにconfigをセットできる

例えばconfig/app.php にあるname を取得するコードがあるとする

$name = config('app.name');

テストコードを書く際に、ここの値により処理が変わることをテストしたい場合、テスト毎にconfigを値を設定できる

use Illuminate\Support\Facades\Config;

// 省略

public function test1() {
// ここでテストコードで取得するconfigをセットする
Config::set('app.name', 'app_name');

$name = Config::get('app.name'); // app_nameが取得できる

// 処理

$this-assertTrue(true); // テスト
}

public function test2() {
// configがセットされていない場合
Config::set('app.name', '');

$name = Config::get('app.name'); // ""になる
}


tinkerで動作を確認

$ php artisan tinker

Psy Shell v0.9.6 (PHP 7.2.14 cli) by Justin Hileman
>>> Config::get('app.name');
=> "Laravel"
>>> Config::set('app.name', 'app_name');
=> null
>>> Config::get('app.name');
=> "app_name"

// こちらでもok
>>> config('app.name');
=> "app_name"


参考

固有のconfig値を設定する