从 Laravel 5.1 到 5.2 的更新已停止 PHPUnit 工作

Posted

技术标签:

【中文标题】从 Laravel 5.1 到 5.2 的更新已停止 PHPUnit 工作【英文标题】:Update from Laravel 5.1 to 5.2 has stopped PHPUnit from working 【发布时间】:2016-08-16 00:22:18 【问题描述】:

为了使我们的项目保持最新并利用​​新的开发,我们昨天从 Laravel 5.1 更新到了 5.2。在对我们的代码库进行了几个小时的按摩后,一切似乎都正常运行,除了现在我们在 5.1 中广泛使用的 phpUnit 测试现在已经停止。 PHPUnit 显示第一行以表明它已初始化:

PHPUnit 4.8.24 by Sebastian Bergmann and contributors.

然后无限期地冻结。我尝试升级到更高版本的 PHPUnit(我们使用的是 4.2.24,我尝试迁移到 5.3.2,但结果相同)。

很遗憾,日志中没有错误。我试图删除所有测试以确保 PHPUnit 在没有任何测试的情况下运行,它确实这样做了:

Time: 2.19 seconds, Memory: 4.25Mb
No tests executed!

这表明我的测试中某处可能存在某些问题,但我已着手删除所有内容,但只有一个测试,问题仍然存在。

有谁知道从 5.1 迁移到 5.2 的原因可能是什么?如何进行调试并让这些测试再次运行?

我们使用的是 PHP 5.6.13 版。

配置,物有所值:

<?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="true">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist>
            <directory suffix=".php">app/</directory>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>

【问题讨论】:

你使用的是什么 PHP 版本? @RossWilson 道歉,5.6.13 我知道 PHP7 有一些问题,但不幸的是 5.6 没有。 嗨@dKen,我之前也遇到过,因为 laravel 的测试 API 从版本 5.1 更改为 5.2(检查 API) 【参考方案1】:

我遇到了同样的问题,我通过从测试中删除 DatabaseMigrations 来解决。如果您有它,请尝试将其删除并再次运行测试。

【讨论】:

老实说,我不记得我是如何解决这个问题的,但我没有删除迁移。如何在不使用迁移的情况下使用一致的数据库进行测试?编辑:实际上,我认为这是 5.15.2 的配置更改方式。我自下而上重建了我的测试配置并记录了它,以便我以后记住! 感谢您的评论。我并不是说我删除了迁移文件。我指的是 DatabaseMigrations trait laravel.com/docs/5.2/…【参考方案2】:

对于那些陷入更多 Laravel 疯狂的可怜人来说,这里的问题是 5.1 中的某些配置更改为 5.2。沮丧的是,我从下往上重建了我的配置,一切又开始工作了。这是我所做的:

    添加一个名为.env.testing 的测试环境文件。

我的看起来有点像这样:

DB_CONNECTION="testing"

DB_HOST=localhost
DB_DATABASE=something_tests
DB_USERNAME=username
DB_PASSWORD=password

APP_DEBUG="true"
    在您的phpunit.xml 文件的&lt;php&gt; 部分中,添加&lt;env name="APP_ENV" value="testing"/&gt;,使其指向上述文件。 检查您的 config/database.php 文件并确保 DB_CONNECTION 已定义且正确。

完成后,照常执行php artisan config:clear。我还发现,如果在开发过程中某些测试失败,有时我的测试数据库会变得一团糟,所以有时我需要把整个东西炸掉并重建。

【讨论】:

以上是关于从 Laravel 5.1 到 5.2 的更新已停止 PHPUnit 工作的主要内容,如果未能解决你的问题,请参考以下文章

从 Laravel 5.2 更新到 5.3 后,调用数组上的成员函数 all()

如何从控制器获取记录到 Ajax laravel 5.2

升级到 Laravel 5.2 会使所有会话失效

使用 laravel 安装程序安装特定版本

laravel从5.2到5.5从入门到精通视频教程共16套

Laravel 从 5.1.46 更新到 5.2.* php artisan Segmentation fault