2016-02-22 74 views
1

當我嘗試測試我的API使用下面的代碼:PHP的單元測試401

$client = new Client(); 
     $res = $client->request('POST', $this->url.'/api/v1/school/1', [ 
      'form_params' => [ 
       'currentUserId' => 1 
      ] 
     ]); //line 22 

     $obj = json_decode($res->getBody()); 
     $result = $obj->{'result'}->{'message'}; 
     $this->assertEquals('Error', $result); 

這不是走得更遠,那麼第22條(見註釋)。當我張貼到相同的URL在郵遞員的結果是(具有狀態代碼401):

{ 
    "result": { 
    "message": "Error", 
    "school": "Error show school" 
    } 
} 

但它爲什麼在我的單元測試進一步走向何方?當我以200作爲迴應時,它會更進一步!

+0

您可以在腳本的開頭放置'error_reporting(E_ALL);'併發布任何錯誤或警告。一般來說,在測試過程中出現錯誤報告是一個好主意。 – HenryTK

回答

1

我不能評論你的問題,所以我需要問我的答案。您在第22行收到了什麼樣的錯誤,或者腳本爲什麼會中斷?您是否啓用了錯誤報告和/或檢查了日誌文件?如果不存在錯誤/異常,則嘗試轉儲$res

0

找到了答案!你必須補充:現在

['http_errors' => false] 

方法:

$client = new Client(); 
     $res = $client->request('POST', $this->url.'/api/v1/school/1',['http_errors' => false], [ 
      'form_params' => [ 
       'currentUserId' => 1 
      ] 
     ]); 
0

雖然傑米的答案似乎工作,但有一個非常小的細節,你應該小心的。如果你使用:

$client = new Client(); 
$res = $client->request('POST', $this->url.'/api/v1/school/1',['http_errors' => false], [ 
     'form_params' => ['currentUserId' => 1] 
     ]); 

在傑米的答案,你總是會得到200狀態碼,即使你提供錯誤的憑據,你應該得到401,這就是爲什麼這個代碼不會阻塞你的過程,但是那並不這並不意味着你的動機來檢查401狀態是否滿足。 如果你真的想檢查它是否返回401 PHPUnit的,你應該這樣使用它:

$client = new Client(); 
$res = $client->request('POST', $this->url.'/api/v1/school/1',[ 
     'http_errors' => false, 
     'form_params' => ['currentUserId' => 1] 
     ]); 
$status = $response->getStatusCode(); 
$this->assertEquals(401,$status); 

這將導致OK,因爲它實際上將針對401

匹配返回代碼,我希望很明顯並幫助