Php Laravel表单请求-$this->;user()与auth()的比较->;授权中的用户()
有人能解释一下,我们为什么不应该在from请求Php Laravel表单请求-$this->;user()与auth()的比较->;授权中的用户(),php,laravel,unit-testing,Php,Laravel,Unit Testing,有人能解释一下,我们为什么不应该在from请求authorize方法中通过Auth::user()或Auth()->user()助手与文档中建议的$this->user()方法来获取经过身份验证的用户 在我的例子中,我尝试对表单请求进行单元测试,并且auth()->user()允许我检索用户,而$this->user()不允许,因为我没有发出完整的请求。我只是为我的测试创建表单请求对象 public function setUp(): void { parent::setUp();
authorize
方法中通过Auth::user()
或Auth()->user()
助手与文档中建议的$this->user()
方法来获取经过身份验证的用户
在我的例子中,我尝试对表单请求进行单元测试,并且auth()->user()
允许我检索用户,而$this->user()
不允许,因为我没有发出完整的请求。我只是为我的测试创建表单请求对象
public function setUp(): void
{
parent::setUp();
$this->subject = new \App\Http\Requests\OrderStoreRequest();
}
// Acting as has no effect when manually creating the orderStoreRequest object
public function testAuthorize()
{
$this
->actingAs(\factory(User::class)->create())
->assertTrue($this->subject->authorize());
}
ActingAs()。由于您只是在没有此生命周期的情况下调用您的请求,因此您将永远无法在请求中注入任何内容
要使代码正常工作,需要设置UserResolver。可以这样做
$this->subject->setUserResolver(function () use($user) {
return $user;
});
为了便于使用,我强烈建议进行Laravel特性测试,而不是单元测试。你将要通过很多方法奋力拼搏,没有Laravel生命周期是不可能被调用的。你会在应用程序上看到doing call()和json()。我绝对建议不要做那个测试,你是在测试框架,而不是你的代码。。。您要测试的是命中一个端点,然后断言一切正常,例如,您的端点创建了一个您自己的新模型,测试它是否被创建。如果要测试用户在未经授权或甚至未登录时是否被拒绝,请点击端点并使用$response->assertbanbidded()
或$response->assertUnauthorized()
断言响应。。。