2017-07-06 154 views
0

我想用有效格式測試我的端點。例如,我有/api/token(POST),它將返回api標記。Laravel測試 - 如何驗證JSON響應中的每個字段

在我的情況下,此端點將返回「標記」字符串和「消息」字段。因此,我想檢查這兩個字段是否存在有效格式。目前我正在使用Laravel Validator

例JSON輸出:

{ 
"message": "login successful", 
"token": "d4zmendnd69u6h..." 
} 

Test類(ApiTokenTest.php)。

class ApiTokenTest extends TestCase 
{ 

    protected $validFormBody = [ 
     'os_type' => 'android', 
     'device_id' => '0000-AAAA-CCCC-XXXX', 
     'os_version' => '5.1', 
     'apps_version' => '1.0', 
    ]; 

    public function testSucessResponseFormat() 
    { 
     $response = $this->json('post', '/api/token', $this->validFormBody); 

     $validator = Validator::make(json_decode($response->getContent(), true), [ 
      'token' => 'required|size:100', // token length should be 100 chars 
      'message' => 'required', 
     ]); 

     if ($validator->fails()) { 
      $this->assertTrue(false); 
     } 
     else { 
      $this->assertTrue(true); 
     } 
    } 

} 

這裏的問題是失敗的消息是不是真的有幫助,特別是如果我有超過1個字段的格式無效,應我斷言一個接一個? (見失敗案例下的phpunit輸出)。我應該使用什麼來驗證每個字段的格式? 在此先感謝。

There was 1 failure: 

1) Tests\Feature\ApiTokenTest::testSucessResponseFormat 
Failed asserting that false is true. 

回答

1

看起來你是不是在終端顯示任何內容,如果有任何事實驗證錯誤,你可以做的是var_dump到終端,如果驗證失敗,就像這樣:

if ($validator->fails()) { 
     var_dump($validator->errors()->all()); 
     $this->assertTrue(false); 
    } 
    else { 
     $this->assertTrue(true); 
    } 
+0

感謝您的想法。我用'fwrite(STDERR,print_r($ validator-> errors() - > all(),true));'來正確顯示輸出 – xmhafiz

相關問題