【发布时间】:2011-06-16 17:38:28
【问题描述】:
我想测试我用 Zend_Form 创建的表单。现在的问题是我的表单中有一个验证码字段。 Zend 框架大师之一告诉我,我应该将验证码字段的验证模拟为模拟对象。
我已经在 PHPUnit 手册上阅读了这个http://www.phpunit.de/manual/3.0/en/mock-objects.html。但我真的不明白我怎么能嘲笑一个验证器。
有人有这方面的经验吗?谁能帮帮我?
谢谢
更多信息:
我希望我的测试不会中断,因为它无法测试验证码字段。所以我需要找出某种方式,帖子不会因为验证码字段而停止。
public function testCanSubmitContactForm(){
$mock = $this->getMock('Zend_Form_Element_Captcha', array(), '', false);
$mock->expects($this->once()->method("isValid")->will($this->resturnValue(true)));
$this->request->setMethod('post')
->setPost(array(
'email' => 'someemail@adres.com',
'comment' => 'Testing the bladiebla contact form'
'captcha' => ''//no idea
));
$this->dispach('/contact');
}
这是我的 Zend_Form 生成表单的样子:
<form id="contact-form" enctype="application/x-www-form-urlencoded" method="post" action="/index/contact"><dl class="zend_form">
<dt id="email-label"><label for="email" class="required">Uw E-mailadres</label></dt>
<dd id="email-element">
<input type="text" name="email" id="email" value="" /></dd>
<dt id="comment-label"><label for="comment" class="required">Stel hieronder uw vraag of geef je commentaar op</label></dt>
<dd id="comment-element">
<textarea name="comment" id="comment" cols="71" rows="24"></textarea></dd>
<dt id="captcha-input-label"><label for="captcha-input" class="required">SPAM Beveiliging</label></dt>
<dd id="captcha-element">
<pre> _ _ __ __ ______ ______ ______ ___
| \ / || \ \\/ // /_ _// /_ _// /_____// / _ \\
| \/ || \ ` // `-| |,- -| ||- `____ ` | / \ ||
| . . || | || | || _| ||_ /___// | \_/ ||
|_|\/|_|| |_|| |_|| /_____// `__ ` \___//
`-` `-` `-`' `-`' `-----` /_// `---`
`-`
</pre>
<input type="hidden" name="captcha[id]" value="a4957b2dbfea79d8bd654428f6eb0a2c" id="captcha-id" />
<input type="text" name="captcha[input]" id="captcha-input" value="" />
<p class="description">Voer de 6 letters in die hierboven getoond worden. Deze vraag wordt gebruikt om te testen of u een menselijke bezoeker bent teneinde spam-inzendingen te vermijden.</p></dd>
<dt id="submit-label"> </dt><dd id="submit-element">
<input type="submit" name="submit" id="submit" value="Nu Versturen" /></dd></dl></form>
【问题讨论】:
-
请链接到:phpunit.de/manual/current/en/index.html 3.0 已经过时了 :) (我假设您使用 3.5 ?) --- 我对 Zend Framework 并不执着,所以要提供一个有意义的答案我'd需要看到一些代码。但我相信其他人无论如何都能回答这个问题:)
-
您可以在生成表单的代码中添加一个异常,以根据您的应用程序环境生成验证码(这不是 100% 代码覆盖率的最佳方式,但我可以让您暂时运行)
-
@Jeff。这就是我使用验证码处理测试表单的方式。原因是通常处理和验证验证码是 ZF 的工作,这意味着您作为开发人员,不要为其创建任何自定义逻辑或代码。
-
基于 public 文件夹中 index.php 文件中 zend 的默认设置,定义了常量 'APPLICATION_ENV',如果没有通过 getenv 接收到值(您可以通过 . htaccess 并在 apache 中启用了 env_module)该值自动设置为生产。在您的表单生成代码中,您可以检查该常量,例如 if(APPLICATION_ENV == 'production'){ // 创建验证码元素 }
-
它是开箱即用的,我使用了很多,即:如果我在开发环境中,当我的应用程序发送电子邮件时,我将它们发送给我自己的邮箱,我用它来显示更多信息,比如每个查询都运行相关的统计信息。
标签: php zend-framework mocking phpunit zend-form