【问题标题】:Silex & phpunit JSON responseSilex & phpunit JSON 响应
【发布时间】:2012-09-18 09:50:31
【问题描述】:

我正在尝试使用 phpunit 为 Silex 编写一些测试。

我有一个生成 Crawler 对象的类 Symfony\Component\BrowserKit\Client。

此对象期望客户端的结果是 xhtml,但是我尝试测试的 api 返回 JSON,并且爬虫不允许这样做。

Silex 或 phpunit 中是否有内置类可以与 JSON 一起使用,还是我必须自己编写?

干杯

【问题讨论】:

    标签: json phpunit silex


    【解决方案1】:

    处理json没什么特别的,但是不用爬虫也可以用客户端。只需在客户端调用getResponse() 即可获得响应,如下所示:

    $client = $this->createClient();
    $client->request('GET', '/');
    $response = $client->getResponse();
    
    $data = json_decode($response->getContent(), true);
    $this->assertSame(array('id' => 1, 'name' => 'igorw'), $data['users'][0]);
    

    我建议您将此逻辑移到测试用例的辅助方法中并使用它。

    【讨论】:

      【解决方案2】:

      要在 Symfony 2 Browser-Kit 中发送 JSON 请求,请使用 HTTP_ACCEPT 而不是 ACCEPTHTTP_CONTENT_TYPE 而不是 CONTENT_TYPE。这是一个发送 POST 请求的示例,其中包含一些 $data

      $client->request(
          $method = 'POST',
          $uri,
          $parameters = array(),
          $files = array(),
          $server = array(
              'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=UTF-8', // for sending urlencoded data
              //or 'HTTP_CONTENT_TYPE' => 'application/json', // for sending JSON data
              'HTTP_ACCEPT'       => 'application/json',      
          ),
          $content = $data,
          $changeHistory = true
      );
      
      $response = $client->getResponse();
      $response_data = json_decode($response->getContent(), true);
      

      【讨论】:

        猜你喜欢
        • 2013-07-08
        • 2012-11-15
        • 2012-10-30
        • 1970-01-01
        • 2013-11-10
        • 1970-01-01
        • 1970-01-01
        • 2023-03-10
        • 2015-11-27
        相关资源
        最近更新 更多