我们在Laravel 4.2中遇到了一个问题,其中我们的/start/global.php
在某些ServiceProvider之后被加载/执行。在我们的ServiceProvider中,public function register()
和public function boot()
在/start/global.php
加载/执行之前被调用。这仅在通过phpUnit运行我们的应用程序测试时发生。如果我们通过服务器上的浏览器运行应用程序,则加载顺序正确。
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';
}
}
<?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