Чтобы начать с вывода, я получаю эту ошибку:
[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