Ошибка впрыскивания службы тестирования Laravel

Чтобы начать с вывода, я получаю эту ошибку:

[ErrorException] Argument 1 passed to SomeValidatorTest::__construct() must be an instance of App\Services\Validators\SomeValidator, none given, called in ....vendor/phpunit/phpunit/src/Framework/TestSuite.php on line 475 and defined 

В приложении Laravel у меня есть сценарий под названием «SomeValidator.php», который выглядит так:

 <?php namespace App\Services\Validators; use App\Services\SomeDependency; class SomeValidator implements ValidatorInterface { public function __construct(SomeDependency $someDependency) { $this->dependency = $someDependency; } public function someMethod($uid) { return $this->someOtherMethod($uid); } } 

который работает без ошибок.

Тогда тестовый скрипт SomeValidatorTest.php выглядит так:

 <?php use App\Services\Validators\SomeValidator; class SomeValidatorTest extends TestCase { public function __construct(SomeValidator $validator) { $this->validator = $validator; } public function testBasicExample() { $result = $this->validator->doSomething(); } } 

Ошибка появляется только тогда, когда тестовый скрипт запускается через «./vendor/bin/phpunit». Тест-класс, по-видимому, запускается без указанной зависимости и выдает ошибку. Кто-нибудь знает, как это исправить? Заранее спасибо.

Вы не можете вводить классы в тесты (насколько я знаю), учитывая, что они не разрешаются автоматически с помощью laravel / phpUnit.

Правильный способ – make (разрешить) их через фасад app laravel. Ваш тестовый скрипт должен выглядеть так:

 <?php class SomeValidatorTest extends TestCase { public function __construct() { $this->validator = \App::make('App\Services\Validators\SomeValidator'); } public function testBasicExample() { $result = $this->validator->doSomething(); } } 

Источник: http://laravel.com/docs/5.1/container