api - 使用 Symfony 在 API 功能测试中创建模拟
问题描述
我正在处理我在 Symfony 4 API 功能测试中遇到的问题。我的功能测试包括向 API 发出请求并分析给出的响应。我一直在这样工作并且工作正常。
问题来自我正在实现的一种新 API 方法,该方法需要对外部服务执行请求。我想在测试期间进行模拟,但我不知道如何创建一个在 API 接收到来自功能测试的请求时仍然存在的模拟。
我一直在考虑像创建模拟这样的东西,它总是在测试环境中使用,但我没有找到任何东西......
解决方案
您可以签入名为 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
推荐阅读
- python - Python/Scrapy 如何使用元一次传递所有数据?
- cloudkit - 无法从共享数据库中获取记录区域
- openstack - 如何从外部网络访问 MicroStack VM 实例
- javascript - 为什么单击事件在其他目标元素中不起作用?
- python - 在硬件上在 C++ 和 Python 之间进行通信的最佳方式是什么?
- python - 如何自动删除没有人的语音频道
- amazon-web-services - AWS IAM,限制账户只能查看和访问自己创建的资源?
- javascript - 弹跳多个盒子动画
- javascript - 如何合并两个Json
- java - 将二维数组的列拆分为单独的二维数组