Php Yii单元测试和验证码

Php Yii单元测试和验证码,php,unit-testing,selenium,yii,captcha,Php,Unit Testing,Selenium,Yii,Captcha,有人知道如何使用yii1.x避免单元测试(Selenium)中的验证码吗? 我已尝试在测试中使用cuurent captcha值: $vc_key = "Yii.CCaptchaAction." . Yii::app()->getId() . ".site.captcha"; $captchaCode = Yii::app()->session->get($vc_key); -得到了空值。还尝试了: $captcha=Yii::app()->getController(

有人知道如何使用yii1.x避免单元测试(Selenium)中的验证码吗? 我已尝试在测试中使用cuurent captcha值:

$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()

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

  • 在模型验证规则中设置相应的条件。对我来说,情况如下: 在规则中:

    排列( “验证码”, “captchaValid”, “allowEmpty”=>!Yii::app()->user->isGuest | |!CCaptcha::checkRequirements(), “enableClientValidation”=>true, 'message'=>Yii::t('app','error code'), 'on'=>array('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']);
            }
    
        }
    }
    

    就这些。对我来说,这是一些额外的补充,但在大多数情况下,上述方法应该是可行的。如果您有什么问题,请告诉我。

    也许这会有帮助:为什么要投否决票?请留下评论。怎么了?
    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']);
            }
    
        }
    }