Проблемы с модульным тестированием формы 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 и получить новое, которое примет форма?

0

Решение

Я не знаю точно, как вы настроили тестирование, но это загрузите приложение между тестами, чтобы вы запустили второй тест со всеми службами и т. д.

Возможно, некоторые из ваших служб инициализируются в первом тесте, а во втором тесте повторно используется уже инициализированный сервис с «неправильными» старыми значениями из первого теста.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]