Laravel 4.2: в случае functionTest /start/global.php загружается после поставщиков услуг - PullRequest
0 голосов
/ 29 августа 2018

Мы столкнулись с проблемой в Laravel 4.2, где наш /start/global.php загружается / выполняется после некоторого ServiceProvider. В нашем ServiceProvider public function register() и public function boot() вызываются до /start/global.php загрузки / выполнения. Это происходит только при запуске наших тестов приложений через phpUnit. Если мы запустим наше приложение через браузер на нашем сервере, последовательность загрузки будет правильной.

TestCase.php:

namespace app\tests\base;

class TestCase extends \Illuminate\Foundation\Testing\TestCase {

    /**
     * Creates the application.
     *
     * @return \Symfony\Component\HttpKernel\HttpKernelInterface
     */
    public function createApplication()
    {
        $unitTesting = true;
        $testEnvironment = 'testing';

        return require __DIR__ . '/../../../bootstrap/start.php';
    }
}

phpunit.xml

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./app/tests/base/</directory>
        </testsuite>
    </testsuites>
</phpunit>

Мы углубились в коды и обнаружили, что $app->booted() в vendor/laravel/framework/src/Illuminate/Foundation/start.php выполняется после public function register() и public function boot() (ServiceProvider).

Как мы можем заставить среду тестирования правильно загружать наше приложение? - Также см .: https://laravel.com/docs/4.2/lifecycle

Полные коды для воспроизведения можно скачать здесь: https://github.com/linslin/laravel-42-test-boot-sequence

...