簡體   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