首页 > 解决方案 > 在 Symfony2 控制器中模拟 Guzzle 请求

问题描述

我正在创建一个功能测试,我需要模拟从 Guzzle 发出的请求到外部 API 的响应。我怎样才能模拟这个请求?我找到了模拟请求本身的示例,但我想模拟在另一个请求中发出的请求。

例子:

我有控制器:

use GuzzleHttp\Client;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\JsonResponse;

class MyController extends Controller
{
    public function indexAction(Request $request)
    {
        $response = Client()->post('http://some.url', [
            'form_params' => [
                'param1' => 'value1'
            ]
        ]);

        $result = $this->doSomethingWithTheResponse($response);
        return new JsonResponse(['status' => $result], Response::HTTP_OK);
    }
}

我有一个测试课:

class MyTestClass extends WebTestCase
{
    public function testSomething()
    {
        $client = static::createClient();
        $client->request('GET', 'path_to_my_controller');
        $response = json_decode($client->getResponse()->getContent());

        $this->assertEquals($response, $expectedResponse);
    }
}

如何在控制器内模拟 guzzle 请求,并且仍然$client->request()在我的测试类中使用?

标签: phptestingphpunitguzzle

解决方案


推荐阅读