Laravel 4.2:在functionTest情况下,/ start / global.php在服务提供商之后加载

时间:2018-08-29 09:09:25

标签: php laravel phpunit laravel-4.2

我们在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

0 个答案:

没有答案