当前位置:  开发笔记 > 前端 > 正文

你如何单元测试包含CSRF表单元素的Zend_Form?

如何解决《你如何单元测试包含CSRF表单元素的Zend_Form?》经验,为你挑选了1个好方法。

我正在使用带有Zend_Form的CSRF隐藏哈希元素并尝试单元测试登录但不知道如何编写单元测试以包含该元素.查看文档并阅读尽可能多的教程.我甚至都把它们全都搞熟了,但没有人提到这一点.



1> Lukas Norman..:

每次呈现表单时都会生成Csrf值.表单的隐藏元素预先填充该值.该值也存储在会话中.提交表单后,验证检查表单中发布的值是否存储在会话中,否则验证失败.至关重要的是,表单必须在测试期间呈现(因此它可以生成隐藏值并将其存储到会话中),然后我们可以从渲染的html中提取隐藏的值,稍后我们可以将隐藏的哈希值添加到我们的要求.考虑这个例子:

function testAddPageStoreValidData()
{
    // render the page with form 
    $this->dispatch('/form-page');

    // fetch content of the page 
    $html = $this->getResponse()->getBody();

    // parse page content, find the hash value prefilled to the hidden element
    $dom = new Zend_Dom_Query($html);
    $csrf = $dom->query('#csrf')->current()->getAttribute('value');

    // reset tester for one more request
    $this->resetRequest()
         ->resetResponse();

    // now include $csrf value parsed from form, to the next request
    $this->request->setMethod('POST')
                  ->setPost(array('title'=>'MyNewTitle',
                                  'body'=>'Body',
                                  'csrf'=>$csrf));
    $this->dispatch('/form-page');

    // ...
}

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有