有人知道如何避免使用Yii 1.x进行单元测试(Selenium)中的验证码吗? 我试图在我的测试中使用curapnt验证码值:
$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 :(得分:0)
用这种方式工作: 1.添加到您的测试配置(它由Yii单元测试使用)一些变量可以说,它将是" testmode":
...
'params' => array(
'testmode' => true, // to avoid captcha validation
),
...
在您的模型验证规则中设置相应的条件。对我而言,它遵循: 在规则中:
阵列( '附加码&#39 ;, ' captchaValid&#39 ;, ' allowEmpty' =>!Yii :: app() - > user-> isGuest || !CCaptcha :: checkRequirements() ' enableClientValidation' =>真正, ' message' => Yii :: t(' app','错误的代码'), '上' =>阵列('创建&#39), ),
下面:
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']);
}
}
}
这就是全部。对于我的情况,它是一些额外的完成,但在大多数情况下,上面的方法应该工作。如果您遇到一些问题,请告诉我。