繁体   English   中英

Laravel测试API端点-缺少POST参数

[英]Laravel Testing API Endpoint - POST Parameters Missing

我有一个要测试的API端点,它接收POST负载。 端点基本上会调用Omnipay Sage Pay库来处理服务器通知。

我可以使用Postman客户端正常发布到此端点,但是使用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库本身中?

解决了..事实证明,Omnipay允许您在调用Omnipay对象时将自己的Request类/对象作为第三个参数传递。 然后,库将可以从测试$this->post($url, $data);访问POST参数$this->post($url, $data); 呼叫。

Laravel的Illuminate\\Http\\RequestSymfony\\Component\\HttpFoundation\\Request的扩展,因此我们可以直接通过它。

<?php 

use Illuminate\Http\Request;

class SagePayController extends Controller
{
    protected $gateway;

    protected function setupGateway(Request $request)
    {
        $this->gateway = OmniPay::create('SagePay\Server', null, $request);

        ...
    }

    ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM