Laravel 仅模拟请求功能和 header
Laravel Mock Request function only and header
我用 PHPUnit 9.0 测试代码。
我使用 Laravel 框架 8.* 和 PHP 7.4
我很难测试使用 request()
的函数
这是我要测试的代码的一个非常简短的版本:
trait SomeTrait
{
function someFunction()
{
//1. retrieve only the documents
$documents = request()->only('documents');
....
//set an array called $header
$header = [ 'Accept-Encoding' => 'application/json'];
//2. add to Array $header if someKey is available in headers
if (request()->headers->has('someKey'))
{
$header = Arr::add($header, 'someKey', request()->header('someKey'));
}
}
}
首先 (1.) 它必须从请求中获取文档。我通过请求的模拟解决了这个问题并且它有效:
$requestMock = Mockery::mock(Request::class)
->makePartial()
->shouldReceive('only')
->with('documents')
->andReturn($document_data);
app()->instance('request', $requestMock->getMock());
$this->someFunction();
我创建了一个模拟请求 class,当 request()->only('documents');
在 someFunction()
中被调用时 returns $document_data
。
但是接着代码request()->headers->has('someKey')
returns报错:
Call to a member function has() on null
任何人都可以帮助并解释我如何测试代码吗?
感谢您的帮助!我找到了一个没有模拟请求的解决方案 - 有时它比你想象的更容易 :D
//create a request
$request = new Request();
//replace the empty request with an array
$request->replace(['documents' => $all_documents]);
//replace the empty request header with an array
$request->headers->replace(['someKey' => 'someValue']);
//bind the request
app()->instance('request', $request);
我用 PHPUnit 9.0 测试代码。 我使用 Laravel 框架 8.* 和 PHP 7.4
我很难测试使用 request()
这是我要测试的代码的一个非常简短的版本:
trait SomeTrait
{
function someFunction()
{
//1. retrieve only the documents
$documents = request()->only('documents');
....
//set an array called $header
$header = [ 'Accept-Encoding' => 'application/json'];
//2. add to Array $header if someKey is available in headers
if (request()->headers->has('someKey'))
{
$header = Arr::add($header, 'someKey', request()->header('someKey'));
}
}
}
首先 (1.) 它必须从请求中获取文档。我通过请求的模拟解决了这个问题并且它有效:
$requestMock = Mockery::mock(Request::class)
->makePartial()
->shouldReceive('only')
->with('documents')
->andReturn($document_data);
app()->instance('request', $requestMock->getMock());
$this->someFunction();
我创建了一个模拟请求 class,当 request()->only('documents');
在 someFunction()
中被调用时 returns $document_data
。
但是接着代码request()->headers->has('someKey')
returns报错:
Call to a member function has() on null
任何人都可以帮助并解释我如何测试代码吗?
感谢您的帮助!我找到了一个没有模拟请求的解决方案 - 有时它比你想象的更容易 :D
//create a request
$request = new Request();
//replace the empty request with an array
$request->replace(['documents' => $all_documents]);
//replace the empty request header with an array
$request->headers->replace(['someKey' => 'someValue']);
//bind the request
app()->instance('request', $request);