簡體   English   中英

Laravel 測試請求

[英]Laravel testing requests

我正在開發一個大型 Laravel 應用程序,目前在 v8.45.1 上從未進行過測試,所以我正在努力讓它達到我們可以開始編寫單元和功能測試的程度。

我遇到了一個問題,其中兩個請求類( App\\Core\\RequestApp\\Core\\FormRequest )都使用一個特征RequestTrait ,它包含一組實用程序方法。

這顯然在本地/暫存/生產中運行良好,但是當我運行測試套件時,它抱怨該特性提供的任何方法都不存在:

Method Illuminate\Http\Request::isFromTrustedSource does not exist.

它們在不同地方被稱為Request::isFromTrustedSource()request()->isFromTrustedSource()

我可以想象,在測試環境中運行應用程序時,請求可能會有所不同。 它是使用不同的類,還是由於某種原因該特性不適用?

我想,我發現了你的問題 - App\\Core\\Request extends Illuminate\\Http\\Request 並且在 index.php 你使用 App\\Core\\Request

問題出在 Illuminate\\Foundation\\Testing\\Concerns\\MakesHttpRequests::call()

當您在測試套件中使用 $this->get(...) 時 - 此方法使用標准請求引導應用程序 - 而不是您的 App\\Core\\Request

您可以在基本測試/TestCase.php 中覆蓋此方法並傳遞您自己的請求。

不幸的是,它沒有合同,因為您無法通過 $this->app->bind() 使用它

像這樣的東西:

class TestCase extends BaseTestCase
{
    public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
    {
    //other code
    $response = $kernel->handle(
        $request = \App\Core\Request::createFromBase($symfonyRequest)
    );
    //other code
    }
}

暫無
暫無

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

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