mysql - Laravel & PHPUnit : allow process isolation to prevent Mysql Too many connections error

标签 mysql phpunit laravel laravel-4

四个月以来,我们使用 Laravel 4 构建了一个具有良好单元测试覆盖率的复杂网络应用程序。现在我们有 159 个测试和 592 个断言来防止回归并允许我们轻松地重构我们的应用程序。

漂亮的图片,但几天后我们在上次测试中出现以下错误:

PDOException: SQLSTATE[HY000] [1040] Too many connections

原因很简单:所有的测试都在同一个进程中运行,MySQL在同一时间内只允许一定数量的访问。现在,我们有太多的测试。如果我在我的测试套件中间删除了几个测试,最后一个通过。

解决方案可能是像下面的配置那样在进程隔离中运行 PHPUnit,但 Laravel 测试似乎不会像那样启动。我在每次测试中都遇到了另一个错误:

PHPUnit_Framework_Exception: Notice: Constant LARAVEL_START already defined in /.../.../autoload.php on line 3
<?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="true"
     stopOnFailure="false"
     syntaxCheck="false"
>

</phpunit>

所以我的问题是:我如何配置 Laravel 测试以使用 processIsolation="true" 或者您是否看到了我的问题的其他解决方案?

最佳答案

您现在可以执行 DB::connection()->setPdo(null) 来关闭测试拆解中的连接,应该可以解决它。如果这不起作用,您可以在任何扩展 Laravel 的 TestCase 的测试中执行 unset($this->app['db'])

关于mysql - Laravel & PHPUnit : allow process isolation to prevent Mysql Too many connections error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835412/

相关文章:

php - 为什么 PHPUnit 在生成覆盖率报告时要执行代码?

php - Laravel Eloquent updateOrCreate 使用预填充模型

mysql - 如何用mysql获取 "partial matches"?

php - 从 PHP 连接到 MySQL 数据库

mysql - 如何在mysql中旋转两个值?

unit-testing - 如何使用 Symfony 在 serviceTest 中模拟 EntityManager?

mysql - 需要Mysql查询(线程已更改)

methods - PHPUnit mocks - 调用断言方法

php - 如何使用 Laravel Eloquent 返回多个关系?

php - 当我从本地 Homestead 更改为 AWS 中的产品时,Laravel 抛出 SQLite 错误