繁体   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