2017-09-03 177 views
0

我想測試一個將值添加到數據庫的路徑。Laravel測試:DatabaseTransactions,回滾不起作用

這裏是我的測試:

use DatabaseTransactions; 
public function testValues() 
{ 
    $this->withoutMiddleware(); // Disabling the auth middleware 


    $response = $this->json('POST', '/values', [ 

     'values' => 'THIS_IS_A_TEST', 

    ]); 
    $response 
     ->assertStatus(200); 



    $this->assertDatabaseHas('values', [ 
     'value' => 'THIS_IS_A_TEST' 
    ]); 
} 

最後斷言永遠是錯的,因爲數據庫是空的。我認爲這是因爲最後的斷言是在將值添加到數據庫之前完成的。

只有當第一個斷言被執行後,我才能執行第二個斷言嗎?

或者我可以使這個測試同步嗎?

回答

0

首先,我可以回答這個問題 只有當第一個斷言被執行後,我才能執行第二個斷言嗎? - 是...

我希望我的代碼能與你合作。

DB::beginTransaction(); 
try { 
    $response = $this->json('POST', '/values', [ 
     'values' => 'THIS_IS_A_TEST', 
     ]); 
     $response 
      ->assertStatus(200); 



     $this->assertDatabaseHas('values', [ 
      'value' => 'THIS_IS_A_TEST' 
     ]); 

     //This success request 
} catch (\Exception $exception) { 
     DB::rollBack(); 

     //This failed request 

}