从 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.1
到 5.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
文件的<php>
部分中,添加<env name="APP_ENV" value="testing"/>
,使其指向上述文件。
检查您的 config/database.php
文件并确保 DB_CONNECTION
已定义且正确。
完成后,照常执行php artisan config:clear
。我还发现,如果在开发过程中某些测试失败,有时我的测试数据库会变得一团糟,所以有时我需要把整个东西炸掉并重建。
【讨论】:
以上是关于从 Laravel 5.1 到 5.2 的更新已停止 PHPUnit 工作的主要内容,如果未能解决你的问题,请参考以下文章