[英]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.