我是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);
}
}
答案 0 :(得分:0)
这是预期的行为。
您的LoginPage构造函数不应该在DI期间实例化任何参数,因此您的解决方法是使用AcceptanceTester实例初始化LoginPage实例的正确方法。
当您将AcceptanceTester指定为LoginPage时,Codeception尝试以下列方式递归地解析依赖关系:
var array = [1,2,3,4,5];
但TestCase是抽象类,因此无法实例化。