Функциональное тестирование страниц AJAX / XMLHttpRequest в Symfony2 - PullRequest
15 голосов
/ 22 февраля 2012

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

Ответы [ 4 ]

33 голосов
/ 29 февраля 2012

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

$crawler = $client->request('GET', '/foo/', array(), array(), array(
    'HTTP_X-Requested-With' => 'XMLHttpRequest',
));
6 голосов
/ 22 февраля 2012

Метод 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',
    ));
    // ...
}

Можно получить дополнительную информациюнашел об объекте запроса в исходном коде .

2 голосов
/ 02 июля 2014

Для 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"}');
0 голосов
/ 24 января 2019

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

$data = ['some' => 'value'];
$client = static::createClient();
$client->request('POST', '/some_uri', ['data' => $data], [],; [
  'HTTP_X-Requested-With' => 'XMLHttpRequest',
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...