gpt4 book ai didi

php - Laravel 5.5 : PHPUnit (with coverage) doesn't like routes from multiple files and throws "A facade root has not been set". 没有覆盖它是绿色的

转载 作者:行者123 更新时间:2023-12-02 14:12:06 24 4
gpt4 key购买 nike

我有 Laravel 5.5,我决定将路由分组到文件中,以便以更有意义的方式组织它们。

这是一个简化的示例 - Web 路由文件位于:

app/Http/Routes/Web/static.php
app/Http/Routes/Web/test.php

static.php 包含:

<?php
declare(strict_types=1);

namespace Foo\Http\Routes\Web;

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
return view('welcome');
});

test.php包含:

<?php
declare(strict_types=1);

namespace Foo\Http\Routes\Web;

use Illuminate\Support\Facades\Route;

Route::get('/test', function () {
return 'test'; // just to simplify
});

RouteServiceProvider.php 包含:

<?php
declare(strict_types=1);

namespace Foo\App\Providers;

use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;

class RouteServiceProvider extends ServiceProvider
{
protected $namespace = 'Foo\Http\Controllers';

/**
* Define your route model bindings, pattern filters, etc.
*
* @return void
*/
public function boot()
{
//

parent::boot();
}

/**
* Define the routes for the application.
*
* @return void
*/
public function map()
{
$this->mapWebRoutes();
}

protected function mapWebRoutes()
{
Route::group([
'middleware' => 'web',
'namespace' => $this->namespace,
], function($router) {
require app_path('Http/Routes/Web/static.php');
require app_path('Http/Routes/Web/test.php');
// more files will land here in the future
});
}
}

到目前为止,我可以通过调用 php artisan route:list 来确认一切正常:

enter image description here

现在我要编写一些测试,但我需要代码覆盖率,所以我添加了:

<logging>
<log type="coverage-html" target="./report" charset="UTF-8"
yui="true" highlight="true"
lowUpperBound="50" highLowerBound="80"/>
</logging>

进入我的phpunit.xml

当我调用phpunit时,我得到:

PHPUnit 7.0.1 by Sebastian Bergmann and contributors.

PHP Fatal error: Uncaught RuntimeException: A facade root has not been set. in /Users/slick/Code/foo/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:218
Stack trace:
#0 /Users/slick/Code/foo/app/Http/Routes/Web/static.php(10): Illuminate\Support\Facades\Facade::__callStatic('get', Array)
#1 phar:///usr/local/Cellar/phpunit/7.0.1/libexec/phpunit-7.0.1.phar/php-code-coverage/CodeCoverage.php(929): include_once('/Users/slick/Co...')
#2 phar:///usr/local/Cellar/phpunit/7.0.1/libexec/phpunit-7.0.1.phar/php-code-coverage/CodeCoverage.php(243): SebastianBergmann\CodeCoverage\CodeCoverage->initializeData()
#3 phar:///usr/local/Cellar/phpunit/7.0.1/libexec/phpunit-7.0.1.phar/phpunit/Framework/TestResult.php(671): SebastianBergmann\CodeCoverage\CodeCoverage->start(Object(Tests\Feature\ExampleTest))
#4 phar:///usr/local/Cellar/phpunit/7.0.1/libexec/phpunit-7.0.1.phar/phpunit/Framework/TestCase.php(687): PHPUnit\Framework\TestResult->run(Object(Tests\Feature\ExampleTest))
#5 phar:///usr/local/Cell in /Users/slick/Code/foo/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 218

Fatal error: Uncaught RuntimeException: A facade root has not been set. in /Users/slick/Code/foo/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 218

enter image description here

在我删除添加到 xml 文件的覆盖行并再次运行 phpunit 后,它就变成了绿色。

$ phpunit PHPUnit 7.0.1 by Sebastian Bergmann and contributors.

.. 2 / 2 (100%)

Time: 381 ms, Memory: 20.00MB

OK (2 tests, 2 assertions)

怎么了?为什么具有代码覆盖率的 phpunit 不喜欢多个文件中的路由(但没有覆盖率它工作得很好)?

最佳答案

Someone had the same issue并通过从代码覆盖范围中排除路由目录来修复该问题。所以我添加到 phpunit.xml:

<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
<exclude>
<directory suffix=".php">./app/Http/Routes</directory>
</exclude>
</whitelist>
</filter>

并且 phpunit 的覆盖效果很好。

天哪……外墙很棘手。

关于php - Laravel 5.5 : PHPUnit (with coverage) doesn't like routes from multiple files and throws "A facade root has not been set". 没有覆盖它是绿色的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49093727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com