首页 > 解决方案 > 使用 Symfony 在 API 功能测试中创建模拟

问题描述

我正在处理我在 Symfony 4 API 功能测试中遇到的问题。我的功能测试包括向 API 发出请求并分析给出的响应。我一直在这样工作并且工作正常。

问题来自我正在实现的一种新 API 方法,该方法需要对外部服务执行请求。我想在测试期间进行模拟,但我不知道如何创建一个在 API 接收到来自功能测试的请求时仍然存在的模拟。

我一直在考虑像创建模拟这样的东西,它总是在测试环境中使用,但我没有找到任何东西......

标签: apisymfonymockingfunctional-testing

解决方案


您可以签入名为 url 的 http-client 服务,如果它比较您的外部 api url 返回某个响应,它将看起来像这样:

$guzzleServiceMock = $this
->getMockBuilder(GuzzleHttp\Client::class)->disableOriginalConstructor()
->setMethods(['get'])
->getMock();

$guzzleServiceMock
    ->expects($this->any())
    ->method('get')
    ->with(
        $this->stringContains('/external/api/route')
    )
    ->willReturnCallback(
        function ($uri, $options = []) {
            return new Response(
                200,
                [],
                '{"result": {
                    "status": "success",
                    "data": "fake data",
                }}'
            );
        }
    );

下一步你需要将服务注入容器,有了这个问题你可以看看这个 repo,有很好的例子说明如何做到这一点:https ://github.com/peakle/symfony-4-service-mock-examples /blob/master/tests/Util/BaseServiceTest.php


推荐阅读