使用页面对象进行代码注入失败

时间:2015-10-04 21:49:00

标签: dependency-injection codeception

我是Codeception的新手,但我遇到了一个注入Page Objects的问题。当我将以下构造逻辑添加到我的页面对象时,会出现问题。

public function __construct(\AcceptanceTester $I) {
    $this->tester = $I;
}

...我从登录页面对象示例中得到了这个:http://codeception.com/docs/06-ReusingTestCode#PageObjects

我得到的错误是:

  

[Codeception \异常\ InjectionException]     无法在' MyCest'的实例中注入依赖项。无法创建' Page \ Login'的实例。无法创建' AcceptanceTester'的实例。无法创建' Codeception \ Scenario'的实例。无法解决依赖性' Codeception \ TestCase'。

这就是我在我的Cest中注入页面的方式。

protected function _inject(\Page\Login $login) {
  $this->login_page = $login;
}

如果删除__construct代码,则错误消失。这是Codeception中的错误还是我做错了什么?

这是我发现的解决方法......

use \AcceptanceTester;
use Page\Login as LoginPage;

class MyCest {
    protected $login_page;
    public function _before(AcceptanceTester $I) {
      $this->login_page = new LoginPage($I);
    }
}

1 个答案:

答案 0 :(得分:0)

这是预期的行为。

您的LoginPage构造函数不应该在DI期间实例化任何参数,因此您的解决方法是使用AcceptanceTester实例初始化LoginPage实例的正确方法。

当您将AcceptanceTester指定为LoginPage时,Codeception尝试以下列方式递归地解析依赖关系:

var array = [1,2,3,4,5];

但TestCase是抽象类,因此无法实例化。