升级到 2.1 后 Codeception 测试失败

Codeception tests failure after upgrading to 2.1

我目前为 Laravel 5.1 开发的应用程序进行了 1400 多个代码测试。我一直在使用 Codeception 2.0.15。但今天我已经转移到 Codeception 2.1.2。我已经更新了 api.suite.yml 和其他套件配置文件,但现在很多测试都失败了。

我注意到的第一件事是,memcached 中的数据在测试后不再被清除,因此目前的测试相互影响。但不仅如此。在其中一个测试中,我 运行 是这样的:

public function tryToCompareClient(UnitTester $I)
{
    $data = [
        'client1' => [
            'id' => 500,
            'option1' => 'yes',
        ],
        'client2' => [
            'id' => 600,
            'option2' => 'no',
        ],
    ];

    Config::set('crm_settings.clients', $data);

    $crm = App::make('crm');

    $I->assertTrue($crm->isClient('client1', $data['client1']['id']));
    // ...

当我 运行 只有这个测试时它工作正常但是当我 运行 多个测试组时,这个测试将失败,因为 crm 在我的应用程序中是单例并且看起来当我在上面的测试中设置新配置时,这个 class 并不是每次都从配置中加载数据,而是仅在未设置时加载数据。似乎 Codeception/Laravel5 模块中的某些内容已更改,因此 App 实例在测试之间被重用。

目前我假设这些问题受到 this commit 中重构的影响,但问题是 - 是否有任何简单的方法可以使 Codeception 像以前的 2.1.2 一样工作,或者唯一的方法是使用旧的此类功能的 2.0 分支?

2.1 分支中似乎存在错误。它在 2.1.4 中也不起作用。将 composer.json 中的版本设置为 2.1.x-dev 后,它开始工作了。

然而 2.1 分支还有其他问题:

  • 每次测试后不清除缓存
  • 当 运行 大量测试时 MySQL 连接错误过多的问题

所以目前我建议任何想要使用 Laravel 分支的 2.1 分支,而不是使用 2.0 分支,直到所有问题都得到解决。

您也可以 track this discussion 了解更多详情。

编辑

我可以确认这些问题已在最新 2.1.x-dev 中得到解决,所以现在一切似乎都像在 2.0 分支中一样工作