【问题标题】:Error: Class 'Route' not found in routes.php when testing standalone Laravel package using Orchestra Testbench错误:使用 Orchestra Testbench 测试独立 Laravel 包时,在 routes.php 中找不到类“Route”
【发布时间】:2018-05-01 14:55:00
【问题描述】:

我现在遇到了一个奇怪的问题。

我目前正在构建一个 Laravel 包,它位于 Github 上的 https://github.com/matthewbdaly/laravel-error-snapshot。我正在使用 Orchestra Testbench package 来单独测试这个包以及它的 BrowserKit 扩展。

当我在本地运行测试套件时,它运行良好。但是,在 Travis CI 中,它会抛出以下错误:

Error: Class 'Route' not found in /home/travis/build/matthewbdaly/laravel-error-snapshot/src/routes.php on line 3

Source

所以我尝试在routes.php 中显式导入Route 外观。同样它只在本地工作,但它返回了不同的错误消息:

PHP Fatal error:  Uncaught RuntimeException: A facade root has not been set. in /home/travis/build/matthewbdaly/laravel-error-snapshot/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:218

Source

我真的不确定为什么它在一种环境中工作,但在另一种环境中却不行。任何人都可以对此有所了解吗?据我所知,这似乎不是 Travis CI 的临时问题,但我不确定还有什么问题。

编辑:这很有趣...

如果我安装 Xdebug 并在启用覆盖率的情况下运行测试,我可以在本地重现错误:

PHP Fatal error:  Uncaught Error: Class 'Route' not found in /home/matthew/Projects/laravel-error-snapshot/src/routes.php:3
Stack trace:
#0 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/php-code-coverage/src/CodeCoverage.php(1097): include_once()
#1 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/php-code-coverage/src/CodeCoverage.php(269): SebastianBergmann\CodeCoverage\CodeCoverage->initializeData()
#2 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/phpunit/src/Framework/TestResult.php(659): SebastianBergmann\CodeCoverage\CodeCoverage->start(Object(Tests\Feature\SnapshotTest))
#3 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/phpunit/src/Framework/TestCase.php(894): PHPUnit\Framework\TestResult->run(Object(Tests\Feature\SnapshotTest))
#4 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/phpunit/src/Framework/TestSuite.php(744): PHPUnit\Framework\TestCase->run(Object(PHPUnit\Framework\TestResult))
#5 /home/matthew/Projects/laravel-error-snapshot/vendor/phpunit/ in /home/matthew/Projects/laravel-error-snapshot/src/routes.php on line 3

我认为这与 Route 外观没有以某种方式解决有关。

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    事实证明,答案相当简单。我只需要从测试覆盖生成中排除路由文件:

    文件phpunit.xml中的过滤器部分:

    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./src</directory>
            <exclude>
                <directory suffix=".php">./src/database</directory>
                <file>./src/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    

    【讨论】:

    • 马修,你救了我! stackoverflow.com/questions/49093727/…
    • 对于任何想知道该文件在哪里(我在哪里)的人,它被称为 phpunit.xml 并且显然通常驻留在文档根目录中。
    猜你喜欢
    • 2014-07-07
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2021-11-12
    • 2017-07-05
    • 2018-08-05
    • 2014-01-05
    • 2021-08-23
    相关资源
    最近更新 更多