2017-09-03 178 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 

}