簡體   English   中英

Phpunit測試Laravel控制器

[英]Phpunit testing Laravel controller

我正在構建一個小的Laravel應用程序,我想用phpunit測試它。 一個控制器是一個非常簡單的應用程序:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use GuzzleHttp\Client;

class MyController extends Controller
{
    protected $client;

    public function __construct(Client $client)
    {
        $this->client = $client;
    }

    public function doSomething(Request $request)
    {
        ...

        $this->client->post(...);

        ...
    }
}

所以,正如你可以看到我在控制器中傳遞Guzzle對象(我的想法是用模擬處理程序替換該客戶端。我想測試函數doSomething是否正在做我期待的但我不知道怎么稱呼它。

我可以輕松地(在我的MyControllerTest中)執行以下操作:

$controller = new MyController($fakeGuzzleObject);

但是,如何調用doSomething並傳遞Request實例?

或者,我可以這樣做:

$this->get(route/to/access/doSomething)

讓Laravel注入請求,但是如何告訴它使用模擬的Guzzle實例?

兩種選擇都很簡單。

第一選擇:

您可以調用控制器操作,如$controller->doSomething(new Request(['data' => 'data']))

第二種選擇:

如果你執行$this->get(...)並希望在構造函數中注入自定義類,只需綁定它:

$this->app->bind(\\GuzzleHttp\\Client::class, function () { $client = new GuzzleHttp\\Client(); });

我建議使用第二種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM