我使用 Zend / Form 创建了登录表单,它包含输入元素和CSRF元素。
<!-- sample login.phtml code snippet -->
<form method="post" action="/xyz">
<?php
echo $this->formelement($form->get('email'));
echo $this->formelement($form->get('password'));
echo $this->formelement($form->get('csrf'));
echo $this->formelement($form->get('submit'));
?>
</form>
由于针对CSRF元素的验证,以下测试用例失败。
public function testLogin()
{
//code goes here
$params = array('email' => 'example@test.com', 'password' => 'example@test.com');
$this->dispatch($url, $method, $params);
//if the given username and password is correct the login page redirected to default home page
$this->assertResponseStatusCode(302);
}
在上面的测试用例中,我设置了电子邮件和密码值,但我不知道如何设置CSRF元素。我怎样才能测试实现CSRF元素的表单?
答案 0 :(得分:1)
这可以通过以下方式轻松实现:
$form = new LoginForm();
$csrf = $form->get('csrf')->getValue();
$params = array('email' => 'example@test.com',
'password' => 'example@test.com',
'csrf' => $csrf
);
除非你的表单需要表单管理器,否则你不得不使用它而不仅仅是实例化类,但在单元测试中也很容易。
更新:
另一种有效的方法:
$form = new LoginForm();
$form->prepare();
$params = new \Zend\Stdlib\Parameters(
array(
'csrf' => $_SESSION['Zend_Validator_Csrf_salt_csrf']['hash'],
'yourotherparams' => 'thingsandstuff'
);
$this->dispatch($url, $method, $params);