Ответ 1
После поиска с ответом "Проблемный" правильный синтаксис:
$crawler = $client->request('GET', '/foo/', array(), array(), array(
'HTTP_X-Requested-With' => 'XMLHttpRequest',
));
Возможно ли смоделировать/сделать запрос XMLHttpRequest (ajax) в тестах symfony2?
После поиска с ответом "Проблемный" правильный синтаксис:
$crawler = $client->request('GET', '/foo/', array(), array(), array(
'HTTP_X-Requested-With' => 'XMLHttpRequest',
));
Метод 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 в исходном коде.
Для 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"}');
Если вы работаете с Symfony 3.x или 4.x, это правильный способ сделать это, используя метод POST.
$data = ['some' => 'value'];
$client = static::createClient();
$client->request('POST', '/some_uri', ['data' => $data], [],; [
'HTTP_X-Requested-With' => 'XMLHttpRequest',
]);