Codeception 助手使用 $I 而不将其传递给助手

Posted

技术标签:

【中文标题】Codeception 助手使用 $I 而不将其传递给助手【英文标题】:Codeception helper to use $I without passing it into the helper 【发布时间】:2015-12-20 21:15:45 【问题描述】:

我想创建一些可重用的方法,这些方法使用 Form Helper 中不同 AcceptanceTester 方法的集合。这些函数不适合PageObject,并且由于StepObjects继承自AcceptanceTester,您可以在方法中注入它们替换AcceptanceTester,我不想创建一个Form StepObject并同时注入AcceptTester和Form,这看起来很草率。

有没有办法在帮助程序中访问 $I ?这似乎是一个帮助者的用例。或者这不是你应该使用助手的方式吗?如果没有人可以用一个真实的例子来解释他们的用法,那么本节中的文档似乎对我的理解没有帮助。我可以看到我可以将 $I 传递给助手,但我宁愿注入两个 StepObjects,传递 $I 看起来不对。

助手

<?php
namespace Helper;

class Form extends \Codeception\Module

    public function seeFormError($message) 

        $I = ???

        $I->see($message, 'small.error);
    

使用

protected $form;

protected function _inject(\Helper\Form $form)

    $this->form = $form;


public function login() 

    $this->form->seeFormError('Enter a valid email');

【问题讨论】:

可以这样访问其他模块的方法:$this->getModule('PhpBrowser')->see(); 【参考方案1】:
<?php
namespace Codeception\Module;

class UnitHelper extends \Codeception\Module

    public function seeFormError($message) 
    
        $I = $this;
        $I->see($message, 'small.error');
    

使用 $I = $this。您正在处理要扩展的对象。

在此之后,您可以像所有其他人一样在您的 cest/test 中使用新方法$I-&gt;seeFormErrors($message);

尝试修复您的命名空间。我从单元测试助手中获取的示例。

【讨论】:

作为奖励,要启用智能感知,您可以通过 phpdoc 键入提示变量。

以上是关于Codeception 助手使用 $I 而不将其传递给助手的主要内容,如果未能解决你的问题,请参考以下文章

使用 keytab 而不将其写入磁盘的 Bash 脚本

直接将文件上传到SFTP而不将其存储到本地系统[重复]

如何使用 Java 裁剪图像而不将其加载到内存中

如何隐藏启动图像而不将其淡出? [复制]

如何访问对象而不将其作为参数传递?

查找 JSON 对象大小而不将其解析为字符串