我有两个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响应。