Laravel测试:DatabaseTransactions,回滚不起作用

时间:2017-09-03 21:33:30

标签: php laravel testing phpunit

我想测试一条为数据库添加值的路由。

这是我的测试:

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之前完成的。

只有在第一个断言被执行后才能执行第二个断言吗?

或者我可以同步进行此测试吗?

1 个答案:

答案 0 :(得分: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

}