Форма функционального тестирования с CSRF, включенным в Symfony

Каков лучший способ создать функциональные испытания для тестирования форм с защитой CSRF, включенной в Symfony?

В настоящее время я должен добавить следующий код перед каждой формой submittion:

  $form = new sfGuardFormSignin();
  $token = $form->getCSRFToken();
  $token_name = $form->getCSRFFieldName();

Тогда я добавляю $token и $token_name для формирования параметров как это:

call('/login', 'POST', array (
    'signin' => 
    array (
      'username' => $username,
      'password' => $password,
      $token_name => $token,
    )))

Опция предлагается в документации:

'_with_csrf' => true,

Не работает вообще.

Там более простой путь состоит в том, чтобы не добавлять маркер к каждой форме, протестированной вручную? Или существует ли способ выключить csrf, проверяющий при запущении тестов?

Путем я описал выше, в порядке, когда необходимо протестировать 1-2 формы, но если проект содержит десятки уникальные формы, это становится болью.

9
задан Stepashka 20 February 2010 в 00:30
поделиться

3 ответа

Конечно, вы не можете использовать параметр _with_csrf, если вы вызываете непосредственно URL-адрес. Вы должны перейти со страницы формы, нажав кнопку отправки. Примерно так:

click('signin', array('signin' => array('username' => $username, 'password' => $password), array('_with_csrf' => true)))

Строка 'signin' должна быть адаптирована к вашей форме. Вы также можете использовать более независимую от ярлыков строку, например 'form # myform input [type = "submit"]' вместо 'signin', адаптируя идентификатор вашей формы.

Как уже было предложено, вы можете отключить CSRF для входа в систему, это действительно полезно для форм, изменяющих данные.

4
ответ дан 3 November 2019 в 03:47
поделиться

Я лично не использую функциональные тесты так широко (вероятно, в ущерб себе), но вы всегда можете отключить защиту CSRF в своем классе формы для целей тестирования.

public function configure ()

  $this->disableLocalCSRFProtection();
3
ответ дан 3 November 2019 в 03:47
поделиться

Я бы отключил CSRF для среды тестирования.

0
ответ дан 3 November 2019 в 03:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: