2015-02-11 2 views
0

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

ответ

0

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

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

+0

Это в основном файл начальной загрузки, который я использую для своих тестов. У меня нет написанного метода tearDown - есть ли что-нибудь, что я могу положить в него, чтобы очистить такие вещи? – blainarmstrong

Смежные вопросы