【发布时间】:2020-01-03 22:23:12
【问题描述】:
我有一个要测试的 API 端点,它接收一个 POST 有效负载。端点基本上调用Omnipay Sage Pay 库来处理服务器通知。
我可以使用 Postman 客户端很好地 POST 到这个端点,但是当使用 Laravel phpunit 测试时,例如
$response = $this->post($url, $data);
Omnipay 库看不到帖子数据?
我认为这是因为 Laravel 助手 $this->post 不使用 application/x-www-form-urlencoded POST 请求?我查看了$this->post 的幕后情况,它似乎直接调用了控制器/方法,这很有意义..
我最接近这项工作的是直接使用 Guzzle(见下文),但是这会将请求路由到“测试”会话之外并返回到我假设的本地应用程序中?这会破坏我的测试,因为我在 POST 调用之前通过工厂设置了一些测试数据。
$response = $client->request('POST', $url, ['form_params' => $data]);
我不太确定问题出在哪里,是我的测试还是 Omnipay 库本身?
【问题讨论】:
-
如果您认为这是由于缺少内容类型标头
application/x-www-form-urlencoded引起的,那么您可以尝试将标头添加到请求中,看看是否可以解决问题。
标签: laravel testing phpunit omnipay laravel-testing