Тестирование страниц AJAX/XMLHttpRequest функционально в Symfony2

Возможно ли смоделировать/сделать запрос XMLHttpRequest (ajax) в тестах symfony2?

Ответы

Ответ 1

После поиска с ответом "Проблемный" правильный синтаксис:

$crawler = $client->request('GET', '/foo/', array(), array(), array(
    'HTTP_X-Requested-With' => 'XMLHttpRequest',
));

Ответ 2

Метод Request#isXmlHttpRequest() просто проверяет, соответствует ли заголовок X-Requested-With значению XMLHttpRequest. Если этот метод используется для определения того, является ли запрос вызовом ajax, вы можете имитировать поведение в тестовом клиенте, добавив соответствующий заголовок в запрос:

class FooFunctionalTest extends WebTestCase
{
    $client = static::CreateClient();
    $crawler = $client->request('GET', '/foo/', array(), array(), array(
        'X-Requested-With' => 'XMLHttpRequest',
    ));
    // ...
}

Более подробную информацию можно найти в объекте Request в исходном коде.

Ответ 3

Для POST, PUT:

$crawler = $client->request('POST', '/foo/', array('param' => 'value'), array(),
array(
    'HTTP_X-Requested-With' => 'XMLHttpRequest',
));

Для POST, PUT с сырым телом JSON:

$crawler = $client->request('POST', '/foo/', array(), array(), array(
    'HTTP_X-Requested-With' => 'XMLHttpRequest',
    'CONTENT_TYPE' => 'application/json',
), '{"param": "value"}');

Ответ 4

Если вы работаете с Symfony 3.x или 4.x, это правильный способ сделать это, используя метод POST.

$data = ['some' => 'value'];
$client = static::createClient();
$client->request('POST', '/some_uri', ['data' => $data], [],; [
  'HTTP_X-Requested-With' => 'XMLHttpRequest',
]);