如何将phpunit测试与本地api结合使用



我有两个docker容器,一个带有apiplatform,另一个带有symfony,它们连接到这个带有docker容器名称的api,所以我在浏览器中的url与连接容器的url不同

url browser: http://apilocal/  
url container: http://api/

我不能使用phpunit测试,因为在我的控制器中我使用http://api/而且它在浏览器中是不可见的,所以每次它都会显示500。

有什么方法可以正确地做到这一点吗?

如果您的API响应错误500,则表明您的应用程序无法正常工作。应该可以按照Symfony测试指南使用phpunit。

在请求端点的测试用例中,不应将整个URL与http://api/endpoint一起使用,而应仅使用不包含主机部分(/endpoint(的端点。

糟糕的方式:

$client->request('GET', 'http://docker_container/profile');

好方法:

$client->request('GET', 'h/profile');

要测试到服务之间的连接,最好将模拟其他服务作为第一步,而作为第二步,可以使用例如合同测试。https://docs.pact.io/是一个很好的工具。

测试应该在Docker容器中运行。

如果您使用公共URL,它能工作吗?如果是,我会检查这两个容器是否共享同一个网络。如果是这样的话,我会检查有效的URL,以确保没有任何附加到请求的URL使用:

$response->getEffectiveUrl();

否则,我会使用guzzle提供的mock处理程序来模拟HTTP响应。

最新更新