背景:我正在编写功能测试以测试HMAC身份验证实现。在测试中,我设置了标头Authorization: Bearer {token}
并发送了一个简单的GET请求,如下所示:
$headers = ['Authorization' => 'Bearer '.$token];
$response = $this->get($uri, $headers);
在我实际的Auth Guard中,我将请求对象注入到构造函数中并检索标头:
class HMACGuard implements Guard
{
public function __construct(
UserProvider $provider,
Request $request
) {
$this->request = $request;
$this->provider = $provider;
}
public function user()
{
// ...
$token = $this->request->bearerToken();
// ...
}
}
这适用于常规请求(通过浏览器或 Postman 等发出)。但是,这不适用于单元测试。但是,这确实可行:
public function user()
{
// ...
$token = request()->bearerToken();
// ...
}
为什么注入的版本有所不同,并且不包含标题信息,而标题信息却是从容器中刚检索到的标题信息呢?返回的对象显然具有不同的ID。如何确保注入正确的Request
实例,其中包含任何一种请求类型的所有信息?有没有一种方法可以确保在不使用request()
和Request
之类的全局帮助程序/外观的情况下访问正确的Request对象?