Я создаю базовый тестовый класс, из которого другие тестовые классы могут расширяться и запускаться с помощью PHPUnit. Этот базовый тестовый класс расширяет предоставляемые Laravel TestCase
учебный класс. Кроме того, я использую Библиотека PHP Faker чтобы создать генератор фейеров, и, в общем, я призываю фасад Artisan от Laravel, чтобы запустить миграцию базы данных в 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,
...
Тогда он должен загружаться автоматически. Это означает, что если есть также псевдоним для фасада Faker внутри config/app.php
файл
...
/*
* 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 в других файлах кода, пока я не получу никаких ошибок.
Задача ещё не решена.
Других решений пока нет …