Codeception API测试人员需要 PhpBrowser 模块,我想使用 ZF2 模块,因为我需要从 ServiceManager 中检索一些服务。
将Codeception更新为2.2后会引发此异常:
[Codeception \ Exception \ ModuleConflictException] ZF2模块冲突 与PhpBrowser
有没有办法在Codeception 2.2中一起启用ZF2和PhpBrowser?
答案 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);
}
}