2015-05-12 96 views
0

任何人都知道如何在Yii 1.x单元测试(Selenium)中避免验证码? 我试着用我的测试中得到验证码cuurent值:Yii单元测试和验证码

$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()非对象

+0

也许这将有助于:https://en.wikipedia.org/wiki/CAPTCHA#Solving_CAPTCHA – SiKing

+0

为什么downvote?请留下评论。哪里不对? – Footniko

回答

0

得到了它的这种方式工作: 1。添加到测试配置(它使用被Yii单元测试)一些变量可以说,这将是“测试模式”:

... 
'params' => array(
    'testmode' => true, // to avoid captcha validation 
), 
... 
  • 在模型中的验证规则设定相应的条件。对我来说这是继: 在规则:

    阵列( '附加码', 'captchaValid', 'allowEmpty'=>的Yii ::应用程序() - >用户> isGuest || CCaptcha!: ('create'), ):checkRequirements(), 'enableClientValidation'=> true, 'message'=> Yii :: t('app','wrong code'), 'on'=> array

  • 下图:

    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']); 
         } 
    
        } 
    } 
    

    就是这样。对于我的情况,这是一些额外的完成,但在大多数情况下,上面的方法应该工作。如果您遇到问题,请告诉我。