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

时间:2016-06-14 15:35:52

标签: codeception

Codeception API测试人员需要 PhpBrowser 模块,我想使用 ZF2 模块,因为我需要从 ServiceManager 中检索一些服务。

将Codeception更新为2.2后会引发此异常:

  

[Codeception \ Exception \ ModuleConflictException] ZF2模块冲突   与PhpBrowser

有没有办法在Codeception 2.2中一起启用ZF2和PhpBrowser?

2 个答案:

答案 0 :(得分:0)

如果您有充分的理由在与PhpBrowser相同的套件中使用ZF2, 您可以创建自己的帮助程序类并将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发布以来,可以加载启用services方法的grabServiceFromContainer部分ZF2。

配置:

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

答案 1 :(得分:0)

感谢您的回答。

工作代码有一些改进:

<?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);
    }
}