Laravel测试:DatabaseTransactions,回滚不起作用
问题描述:
我想测试一个将值添加到数据库的路径。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'
]);
}
最后断言永远是错的,因为数据库是空的。我认为这是因为最后的断言是在将值添加到数据库之前完成的。
只有当第一个断言被执行后,我才能执行第二个断言吗?
或者我可以使这个测试同步吗?
答
首先,我可以回答这个问题 只有当第一个断言被执行后,我才能执行第二个断言吗? - 是...
我希望我的代码能与你合作。
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
}