从Laravel 5.1升级到5.2后,PHPUnit停止工作。

3

为了保持我们的项目更新并利用新的开发,我们昨天从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版本? - Rwd
@RossWilson 抱歉,5.6.13。 - dKen
我知道PHP7存在一些问题,但不幸的是,5.6版本没有任何问题。 - Rwd
嗨 @dKen,我之前也遇到过这个问题,因为 Laravel 的测试 API 从版本5.1变成了5.2(查看API)。 - absolux
2个回答

2

对于那些被卷入更多Laravel疯狂的可怜人,问题在于一些配置从5.15.2发生了变化。为了解决这个问题,我从底层重新构建了我的配置,然后事情开始重新运作。以下是我的做法:

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

我的看起来像这样:

DB_CONNECTION="testing"

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

APP_DEBUG="true"
  1. 在你的phpunit.xml文件的<php>部分,添加<env name="APP_ENV" value="testing"/>,以便它指向上述文件。
  2. 检查你的config/database.php文件并确保DB_CONNECTION被定义且正确。

完成后,执行常规的php artisan config:clear命令。我还发现,如果在开发过程中一些测试失败,有时会破坏我的测试数据库,因此我偶尔需要将整个数据库清空并重新构建。


0

我遇到了同样的问题,我通过从我的测试中移除对DatabaseMigrations的使用来解决了这个问题。如果你的测试中有它,请尝试将其移除并重新运行你的测试。


说实话,我不太记得我是如何解决这个问题的,但我没有删除迁移。如果不使用迁移,如何使用一致的数据库进行测试?编辑:实际上,我认为是在5.15.2中配置更改的方式。我从头开始重建了我的测试配置,并记录下来以便将来记得! - dKen
感谢您的评论。我并不是说我删除了迁移文件,而是指DatabaseMigrations trait https://laravel.com/docs/5.2/testing#resetting-the-database-after-each-test。 - Alex Mansour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接