【问题标题】:Codeception helper to use $I without passing it into the helperCodeception 助手使用 $I 而不将其传递给助手
【发布时间】: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();

标签: php codeception acceptance-testing


【解决方案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 键入提示变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 2021-11-20
  • 2013-06-28
  • 2018-07-23
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多