2015-05-12 99 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']); 
         } 
    
        } 
    } 
    

    就是這樣。對於我的情況,這是一些額外的完成,但在大多數情況下,上面的方法應該工作。如果您遇到問題,請告訴我。