Testing AJAX/XMLHttpRequest pages functionally in Symfony2

前端 未结 4 1227
迷失自我
迷失自我 2021-02-04 04:54

Is it possible to simulate/make an XMLHttpRequest request (ajax) in symfony2 tests?

相关标签:
4条回答
  • 2021-02-04 05:07

    If you are working with Symfony 3.x or 4.x this is the correct way to do it using POST method.

    $data = ['some' => 'value'];
    $client = static::createClient();
    $client->request('POST', '/some_uri', ['data' => $data], [],; [
      'HTTP_X-Requested-With' => 'XMLHttpRequest',
    ]);
    
    0 讨论(0)
  • 2021-02-04 05:09

    After search with "Problematic" answer, the correct syntax is:

    $crawler = $client->request('GET', '/foo/', array(), array(), array(
        'HTTP_X-Requested-With' => 'XMLHttpRequest',
    ));
    
    0 讨论(0)
  • 2021-02-04 05:11

    For POST, PUT:

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

    For POST, PUT with raw JSON body:

    $crawler = $client->request('POST', '/foo/', array(), array(), array(
        'HTTP_X-Requested-With' => 'XMLHttpRequest',
        'CONTENT_TYPE' => 'application/json',
    ), '{"param": "value"}');
    
    0 讨论(0)
  • 2021-02-04 05:23

    The Request#isXmlHttpRequest() method simply checks if the X-Requested-With header is equivalent to XMLHttpRequest. If that's the method you're using to determine if a request is an ajax call, then you can simulate the behavior in the test client by adding the appropriate header to the request:

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

    More information can be found about the Request object in the source code.

    0 讨论(0)
提交回复
热议问题