Codeception:使用夹具测试基于Yii2的应用程序导致“连接太多”错误

时间:2018-04-27 09:59:55

标签: yii2 codeception fixtures

以下示例显示了如何在任何需要它的方法中加载和卸载夹具:

class ServiceTest extends \Codeception\Test\Unit
{

    protected $tester;

    protected function loadFixture()
    {
        $this->tester->haveFixtures(['user' => ['class' => UserFixture::class]]);
    }

    protected function unLoadFixture()
    {
        $this->tester->grabFixture('user')->db->close();
    }

    public function testSuccessSignin()
    {
        $this->loadFixture();
        $form   = new SigninForm([
            'email'    => 'brady.renner@rutherford.com',
            'password' => '123456',
        ]);
        $result = Service::signin($form, new \yii\web\User([
            'identityClass' => Identity::class,
        ]));
        $this->assertTrue($result);
        $this->unLoadFixture();
    }
}

但似乎db->close()无法正常工作,SHOW PROCESSLIST显示许多连接处于“睡眠”状态,当我运行如上所述的测试时。 当我通过_before()fixture()方法加载夹具时也是如此(这些方法是不必要的原因,并非所有方法都需要夹具)。

1 个答案:

答案 0 :(得分:2)

您需要为您的数据库连接传递attribute持久连接true,请参阅此处的问题非GITHUB

'db' => array(
      'class' => 'yii\db\Connection',
      'dsn' => 'mysql:host=localhost;dbname=yii2_advanced_test',
      'username' => 'root',
      'password' => '',
      'tablePrefix' => '',
      'charset' => 'utf8',
      'attributes'=>[
           PDO::ATTR_PERSISTENT => true
      ]
 ),

EDIT

除了以上给出的解决方案,如果它不适合您,您可以在评论中尝试@Mik建议,在代码中的yii2模块设置下设置cleanup:false套装配置请参阅here