Codeception 2.2 api 一起测试 ZF2 和 PhpBrowser 模块

Codeception 2.2 api tests ZF2 and PhpBrowser module together

Codeception API 测试器需要 PhpBrowser 模块,我想使用 ZF2 模块,因为我需要从 ServiceManager.

将 Codeception 更新到 2.2 后抛出此异常:

[Codeception\Exception\ModuleConflictException] ZF2 module conflicts with PhpBrowser

有没有办法在 Codeception 2.2 中同时启用 ZF2 和 PhpBrowser?

如果您有充分的理由在与 PhpBrowser 相同的套件中使用 ZF2, 您可以创建自己的助手 class 并将 ZF2 模块作为依赖项加载。

配置:

modules:
    enabled:
        - PhpBrowser:
            url: http://localhost/
        - \Helper\Zf2Helper:
            depends: ZF2

代码tests/_support/Helper/Zf2Helper.php:

<?php
namespace Helper;

class Zf2Helper extends \Codeception\Module
{

  private $zf2;

  public function _inject(\Codeception\Module\ZF2 $zf2)
  {
     $this->zf2 = $zf2;
  }

  public function doSomethingWithZf2
  {
     $this->zf2->doSomething();
  }
}

更新:

自 Codeception 2.2.2 发布以来,可以加载启用 grabServiceFromContainer 方法的 ZF2 的 services 部分。

配置:

modules:
    enabled:
        - PhpBrowser:
            url: http://localhost/
        - ZF2
            part: services

感谢您的回答。

经过一些改进的工作代码:

<?php
namespace Helper;

use Codeception\Lib\Interfaces\DependsOnModule;

class Zf2Helper extends \Codeception\Module implements DependsOnModule
{

    protected $dependencyMessage = <<<EOF
Example configuring ZF2Helper as proxy for ZF2 module method grabServiceFromContainer.
--
modules:
    enabled:
        - \Helper\ZF2Helper:
            depends: ZF2
--
EOF;

    private $zf2;

    public function _inject(\Codeception\Module\ZF2 $zf2)
    {
        $this->zf2 = $zf2;
    }

    public function _depends()
    {
        return ['Codeception\Lib\ZF2' => $this->dependencyMessage];
    }

    public function grabServiceFromContainer($service)
    {
        return $this->zf2->grabServiceFromContainer($service);
    }
}