他のテストクラスを拡張してPHPUnitで実行できるベーステストクラスを作成しています。このベース テスト クラスは、Laravel が提供するクラスを拡張しTestCase
ます。また、PHP Faker ライブラリを使用してフェイカー ジェネレーターを作成しています。同様に、Laravel の Artisan ファサードを呼び出して、setUp
メソッドでデータベースの移行を実行しています。. 最初は次のように見えました。
<?php
// BaseTester.php
use Artisan;
use Faker\Factory as Faker;
class BaseTester extends TestCase {
protected $fake;
function __construct() {
$this->fake = Faker::create();
}
public function setUp()
{
parent::setUp();
Artisan::call('migrate', [
'--seed' => true,
]);
}
}
初めて PHPUnit を実行したとき、成功しましたが、次の警告も表示されました。
PHP Warning: The use statement with non-compound name 'Artisan' has no effect in /Users/myusername/Sites/app/tests/BaseTester.php on line 3
わかりましたので、なぜそれが私にそれを与えるのだろうと思いました。だから私は削除しようとしました:
use Artisan;
クラスから、BaseTester.php
それは機能し、すべてのテストに合格し、出力にも警告はありませんでした。
さて、なぜそのuse
声明を削除しなければならなかったのか疑問に思いました。次に、自分のconfig/app.php
ファイルに、Artisan
ファサードに使用できるエイリアスがあることを思い出しました。
...
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
...
そのため、自動的にロードする必要があります。config/app.php
つまり、ファイル内に Faker ファサードのエイリアスもある場合
...
/*
* Third party libraries / packages aliases
*/
'Faker' => Faker\Factory::class,
...
次に、それもロードする必要があるため、以下を含める必要はありません。
use Faker\Factory as Faker;
私のBaseTester.php
ファイルで、そのFaker::create
中のメソッドを呼び出すことができます。
そのため、そのステートメントも削除してuse
PHPUnit を実行しましたが、次のエラーが発生しました。
PHP Fatal error: Class 'Faker' not found in /Users/myusername/Sites/app/tests/BaseTester.php on line 12
エイリアスセクションの下のファイルに含まれている呼び出しは機能しますが、同じエイリアスセクションの下の同じファイルにも含まれている呼び出しは機能しないArtisan
ため、今は本当に混乱しています。config/app.php
Faker
最終的に、私のコードは次のようになります。
<?php
// BaseTester.php
use Faker\Factory as Faker;
class BaseTester extends TestCase {
protected $fake;
function __construct() {
$this->fake = Faker::create();
}
public function setUp()
{
parent::setUp();
Artisan::call('migrate', [
'--seed' => true,
]);
}
}
警告なしで動作しますが、エイリアス、名前空間、およびファサードに関して何が起こっているのか理解できません。これを理解するまで、Laravel がどのように機能するのかを本当に理解できないと感じています。
use
エラーが発生しなくなるまで、他のコード ファイル内で Laravel ファサードとステートメントの適切な組み合わせを見つけようとするだけです。