【问题标题】:Yii Unit testing and captchaYii 单元测试和验证码
【发布时间】:2015-07-23 21:51:29
【问题描述】:

有人知道如何在使用 Yii 1.x 的单元测试(Selenium)中避免验证码吗? 我试图在我的测试中使用当前的验证码值:

$vc_key = "Yii.CCaptchaAction." . Yii::app()->getId() . ".site.captcha";
$captchaCode = Yii::app()->session->get($vc_key);

- 得到空值。也尝试过:

$captcha=Yii::app()->getController()->createAction("captcha");
$captchaCode = $captcha->verifyCode;

得到一个错误:致命错误:在非对象上调用成员函数 createAction()

【问题讨论】:

标签: php unit-testing selenium yii captcha


【解决方案1】:

让它以这种方式工作: 1. 将一些变量添加到您的测试配置(Yii 单元测试使用)中,比如说,它将是“testmode”:

...
'params' => array(
    'testmode' => true, // to avoid captcha validation
),
...
  1. 在你的模型验证规则中设置相应的条件。对我来说,它如下: 在规则中:

    数组( '验证码', '验证码有效', 'allowEmpty'=>!Yii::app()->user->isGuest || !CCaptcha::checkRequirements(), 'enableClientValidation' => 真, '消息'=>Yii::t('app', '错误代码'), 'on' => 数组('create'), ),

下面:

public function captchaValid($field, $params) {
    if(!$this->hasErrors($field))
    {
        if (Yii::app()->params['testmode'] == true) // here is our mark
            return;
        $vc_key = "Yii.CCaptchaAction." . Yii::app()->getId() . ".site.captcha";
        if ( Yii::app()->session->get($vc_key) != $this->{$field} )
        {
            $this->addError($field, $params['message']);
        }

    }
}

就是这样。就我而言,这是一些额外的完成,但在大多数情况下,上述方法应该有效。如果您对此有任何问题,请告诉我。

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2012-08-11
    • 2013-05-05
    • 2012-06-15
    • 2010-09-30
    • 2015-10-01
    • 1970-01-01
    • 2017-05-23
    • 2014-06-20
    相关资源
    最近更新 更多