Laravel 5.1: смущает то, как пространства имен и фасады работают в классах PHPUnit Test, расширяющих TestCase

Я создаю базовый тестовый класс, из которого другие тестовые классы могут расширяться и запускаться с помощью 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 в других файлах кода, пока я не получу никаких ошибок.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]