我正在測試我的api。在呼叫路線之前,我將用戶登錄到應用程序。 問題是,在路由調用中,用戶的身份驗證沒有被分配給Auth::id()
。Laravel單元測試從認證測試中調用路由
下面是這種情況:
測試方法:
public function testApiGetOrder()
{
var_dump($this->user); // first dump
Auth::login($this->user); // Can't use $this->be($this->user) here, it would not help anyway...
var_dump(Auth::id()); // second dump
$response = $this->call('GET', '/order/' . $this->order->getKey());
$this->assertResponseOk();
$this->assertJson($response->getContent());
$this->assertJsonStringEqualsJsonString($this->order->toJson(), $response->getContent());
}
OrderController的方法:的testApiGetOrder的
public function show($id)
{
var_dump(Auth::id()); // third dump
var_dump(Auth::user()->getKey()); // fourth dump
// Calling model's logic here
}
輸出:
首先轉儲:object(User)
二轉儲:int(1)
三轉儲:NULL
四轉儲:int(1)
爲什麼用戶的id的值不分配給Auth::id()
?
因爲你還沒有登錄第三次轉儲? –
嘗試切換第三個和第四個轉儲的順序。如果我的懷疑是正確的,我會寫一個擴展的答案,爲什麼會發生這種情況。 – DouglasDC3
結果如我所願。第三次轉儲:int(1),第四次轉儲:NULL。 現在,第三次轉儲= var_dump(Auth :: user() - > getKey())。 第四次轉儲= var_dump(Auth :: id())。 – user2694295