0
我試圖單元測試一個ZF2應用程序。我有一個表格會根據是否適合學生或員工而略有變化,我有兩個獨立的工廠來生產它們。使用CSRF進行單元測試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值並獲得一個新的窗體將接受的信息,我需要做些什麼?
這基本上是我用於測試的引導文件。我沒有寫下tearDown方法 - 有什麼我可以把它清理出來嗎? – blainarmstrong 2015-02-11 13:40:55