отправить форму, используя ajax в функциональном тесте

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

Похоже, что метод submit не принимает аргумент, который указывает, является ли ajax запросом, в отличие от метода request -> http://api.symfony.com/2.3/Symfony/Component/HttpKernel/Client.html#method_submit

Спасибо

Update1

////////////////////////////////////////////////
// My functional test looks exactly like this //
////////////////////////////////////////////////
$form = $buttonCrawlerNode->form(array(
'name'              => 'Fabien',
'my_form[subject]'  => 'Symfony rocks!',
));
// There is no way here I can tell client to submit using ajax!!!!
$client->submit($form);

// Why can't we tell client to submit using ajax???
// Like we do here in the request méthod
$client->request(
'GET',
'/post/hello-world',
array(),
array(),
array('HTTP_X-Requested-With' => 'XMLHttpRequest')
);

4

Решение

Symfony Объект запроса перехватывает запрос XmlHttpRequest в шапке запроса. Поэтому просто добавьте правильный заголовок к вашему запросу в тестовом классе, например:

class FooFunctionalTest extends WebTestCase
{
$client = static::CreateClient();
$url = '/post/hello-world';
// makes the POST request
$crawler = $client->request('POST', $url, array(
'my_form' => array(
'subject' => 'Symfony rocks!'
)),
array(),
array(
'HTTP_X-Requested-With' => 'XMLHttpRequest',
)
);
}

Надеюсь это поможет

7

Другие решения

На самом деле есть способ воспользоваться Client::submit но вам нужно создать новый экземпляр клиента, если вы хотите после этого выполнять не-AJAX-запросы (сейчас смотрите ссылку на выпуск GitHub ниже).

$client->setServerParameter('HTTP_X-Requested-With', 'XMLHttpRequest');
$client->submit($form);

// The following method doesn't exist yet.
// @see https://github.com/symfony/symfony/issues/20306
// If this method gets added then you won't need to create
// new Client instances for following non-ajax requests,
// you can just do this:
// $client->unsetServerParameter('HTTP_X-Requested-With');
1

По вопросам рекламы [email protected]