Я пытаюсь выполнить модульное тестирование приложения ZF2. У меня есть форма, которая немного меняется в зависимости от того, для студентов или сотрудников, и у меня есть две отдельные фабрики для их производства.Проблемы с модульным тестированием Форма ZF2 с CSRF
Во всяком случае, я попытался тестирование формы студента в следующем тесте:
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