PHPUnit терпит неудачу с изоляцией процесса, но проходит без этого флага - PullRequest
2 голосов
/ 01 мая 2019

Мои тесты работают правильно и все зеленое, когда я запускаю их без какого-либо определенного флага:

phpunit --configuration /home/vagrant/code/phpunit.xml /home/vagrant/code/tests

Когда я включаю изоляцию процесса, тесты не выполняются:

phpunit --configuration /home/vagrant/code/phpunit.xml /home/vagrant/code/tests --process-isolation

ошибка выглядит следующим образом:

PHP Fatal error:  Uncaught RuntimeException: A facade root has not been set. in /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:234
Stack trace:
#0 /home/vagrant/code/routes/web.php(6): Illuminate\Support\Facades\Facade::__callStatic('get', Array)
#1 Standard input code(1653): require_once('/home/vagrant/c...')
#2 {main}
  thrown in /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 234
Fatal error: Uncaught RuntimeException: A facade root has not been set. in /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:234
Stack trace:
#0 /home/vagrant/code/routes/web.php(6): Illuminate\Support\Facades\Facade::__callStatic('get', Array)
#1 Standard input code(1653): require_once('/home/vagrant/c...')
#2 {main}
  thrown in /home/vagrant/code/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 234

Я уже пробовал несколько вещей из 3 или 4 потоков, которые я нашел в Laracast или StackOverflow, относительно такого рода исключений, но пока ничего не работает:

  • Исключая маршруты из PHPUnit.xml
  • Запуск phpunit от поставщика / bin или включенного в систему
  • и т. Д.

Любая идея о том, где искатьили проверить?У меня заканчиваются идеи.

Использование последних версий Laravel 5.8 и PHPUnit 8.0.6

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Я столкнулся с той же ошибкой.Я исправил это, создав новый контейнер приложения и затем привязав его к фасаду.

use \Illuminate\Container\Container as Container;
use \Illuminate\Support\Facades\Facade as Facade;

/**
* Setup a new app instance container
* 
* @var Illuminate\Container\Container
*/
$app = new Container();
$app->singleton('app', 'Illuminate\Container\Container');

/**
* Set $app as FacadeApplication handler
*/
Facade::setFacadeApplication($app);

в люменах: bootstrap / app.php

$app->withFacades();
0 голосов
/ 11 мая 2019

Первое, что я бы попробовал: запустить только неудачный тест, а не для всей папки тестов.

Далее я бы удостоверился, что неудачный тест вызывает setFacadeApplication()через createApplication() или что-то подобное.Например, если setUp() не вызывает своего родителя setUp(), статическая переменная $app в Facade может быть не установлена.В этой ситуации в сообщении RuntimeException указано .

protected function setUp() // in your test case class
{
    // parent::setUp(); // it's necessary
}

Поскольку это статическая переменная, после ее установки ее значение останется доступным среди всех тестовых случаев без --process-isolation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...