我试图对ZF2应用程序进行单元测试。我的表格根据学生或员工的不同而略有变化,我有两个独立的工厂来制作它们。
无论如何,我尝试在以下测试中测试学生表格:
public function testStudentFormAcceptsValidValues()
{
$this->getEmMock();
$this->mockLogin('admin');
$form = $this->serviceManager->get('student_form');
$this->getApplicationServiceLocator()->setService('student_form', $form);
$url = '/user/account/add/student';
$this->dispatch($url);
$csrf = $form->get('csrf')->getValue();
$postData = $this->userStubData[1];
$postData['csrf'] = $csrf;
$user = new UserEntity();
$this->getApplicationServiceLocator()->setService('user_entity', $user);
$this->dispatch($url, 'POST', $postData);
$this->assertRedirectTo('/user#students');
$this->assertEntityPropertiesSet($user, $postData);
}
当我运行此测试时,它会通过。但是,我正在对员工表单进行类似的测试,但由于CSRF令牌错误,它会失败。所以只是为了踢,我决定连续两次运行上面的测试,看看会发生什么。它再次失败,原因完全相同。
我最终决定检查两个测试的CSRF令牌值,我发现它们都是相同的。出于某种原因,表单重新使用了之前测试中的CSRF值,而不是创建一个新表单,因此表单拒绝了它。
我需要做些什么才能清除旧的CSRF值并获得表单接受的新值?
答案 0 :(得分:0)
我不确切知道您是如何配置测试的,但测试之间bootstrap the application通常是这样,因此您可以使用所有服务等重新初始化运行第二次测试。
可能您的某些服务在第一次测试中初始化,第二次测试可能会使用第一次测试中的“错误”旧值重新使用已初始化的服务。