Laravel和PHPUnit:允许进程隔离以防止Mysql连接错误太多

Ale*_*ski 12 mysql phpunit laravel laravel-4

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

很好的图片,但由于几天我们在最后的测试中有以下错误:

PDOException: SQLSTATE[HY000] [1040] Too many connections
Run Code Online (Sandbox Code Playgroud)

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

解决方案可能是在进程隔离中运行PHPUnit,如下面的配置,但Laravel测试似乎没有像那样启动.我在每次测试中都遇到其他错误:

PHPUnit_Framework_Exception: Notice: Constant LARAVEL_START already defined in /.../.../autoload.php on line 3
Run Code Online (Sandbox Code Playgroud)
<?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>
Run Code Online (Sandbox Code Playgroud)

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

efi*_*nal 3

对于 Laravel 4,您可以在tearDown() 函数中使用 \DB::disconnect('connection') 。请参阅此处的文档:http ://laravel.com/docs/database#accessing-connections

“如果由于超出底层 PDO 实例的 max_connections 限制而需要断开与给定数据库的连接,请使用断开连接方法”