【问题标题】: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
),
...
-
在你的模型验证规则中设置相应的条件。对我来说,它如下:
在规则中:
数组(
'验证码',
'验证码有效',
'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']);
}
}
}
就是这样。就我而言,这是一些额外的完成,但在大多数情况下,上述方法应该有效。如果您对此有任何问题,请告诉我。