2015-04-29 4 views
4

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

Похоже, представить метод не принимает аргумент, который определяет является ли это Ajax запрос в отличие от метода запроса ->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') 
); 
+0

Можете ли вы предоставить свои коды тестируемого предмета и модульного теста? –

+0

вы можете сделать POST (первый аргумент) и передать базовые данные в виде массива (третий аргумент). какую проблему вы видите в этом? – Matteo

+0

Я отредактировал свой ответ, надеюсь, что это более ясно. – Matteo

ответ

7

Symfony Request Object intercept an 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', 
     ) 
    ); 
} 

Надежда эта помощь

+0

Я обновил свой пост, могу ли добавить в заголовок через méthod submit? пожалуйста, ознакомьтесь с комментариями update1 моего сообщения – smarber

+0

Итак, вы подтверждаете, что не можем воспользоваться преимуществами 'client-> submit ($ form)', которые заботятся о файлах cookie и обо всем. ** Заключение ** для отправки формы с использованием ajax, submit méthod of Client не может этого сделать, поэтому мы должны использовать классический запрос. Thx Matteo – smarber

+0

@smarber на самом деле вы можете воспользоваться client-> submit ($ form). См. Мой ответ. – Taylan

1

На самом деле есть способ, чтобы воспользоваться Client::submit, но вам нужно создать новый экземпляр клиента, если после этого вы хотите выполнить не-аякс-запросы (на данный момент см. ссылку на проблему 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'); 
Смежные вопросы