php - Laravel:如何将标头添加到 Mockery 模拟响应类?
问题描述
我有一个中间件来强制对 Json 的每个响应:
JsonResponseMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\ResponseFactory;
class JsonResponseMiddleware
{
/**
* @var ResponseFactory
*/
protected $responseFactory;
/**
* JsonResponseMiddleware constructor.
*/
public function __construct(ResponseFactory $responseFactory)
{
$this->responseFactory = $responseFactory;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
// First, set the header so any other middleware knows we're
// dealing with a should-be JSON response.
$request->headers->set('Accept', 'application/json');
// Get the response
$response = $next($request);
// If the response is not strictly a JsonResponse, we make it
if (!$response instanceof JsonResponse) {
$response = $this->responseFactory->json(
$response->content(),
$response->status(),
$response->headers->all()
);
}
return $response;
}
}
这是我正在写的测试:
<?php
namespace Tests\Unit\Middlewares;
use App\Http\Middleware\JsonResponseMiddleware;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\ResponseFactory;
use Tests\TestCase;
class JsonResponseTest extends TestCase
{
public function test_response()
{
$response = \Mockery::Mock(Response::class)
->shouldReceive('content')
->shouldReceive('status')
->shouldReceive('headers')
->getMock();
$request = Request::create('/', 'GET');
$middleware = $this->app->make(JsonResponseMiddleware::class);
$middleware->handle($request, function () use ($response) {
return $response;
});
}
}
我得到错误
Error : Call to a member function all() on null
(当然是指$response->headers->all()
)。
如果我删除最后一个->shouldReceive('headers')
,我会得到同样的错误。所以,我想我需要在模拟的 $response 中添加一些假标题。但是怎么做?
谢谢
解决方案
推荐阅读
- r - 查找 R 中列的最小值
- php - $this->__construct() 在父类中调用子类的构造?
- asp.net - 如何使用 Sql 数据适配器在 ASP.NET MVC 中进行分页
- c++ - 错误表达式必须有指向对象类型的指针
- vue.js - 无法在'Storage'上执行'setItem':设置'136114546'的值超出了配额Vue
- list - 在 Prolog 列表中的每个元素之后插入元素
- macos - Mac系统上的“zsh:找不到命令:mvn” intellij ver 2020.2社区
- python - JSON 解码器错误 - 需要 ',' 分隔符:第 1 行第 22 列(字符 21)
- spring-boot - 使用 Spring BOOT 创建访问网页的角色要求
- java - 如何制作总和为 n(n-1)/2 的数字列表