如何在Laravel 5中使用Codeception进行数据库事务?

时间:2015-11-13 08:53:10

标签: php mysql laravel laravel-5 codeception

我正在使用Codeception测试我的Laravel5 API,我注意到Codeception附带的回滚功能有时会因为我提供的巨大的SQL转储而变得有点慢。一种解决方案是使用SQLite使其更快,但我希望坚持使用MySQL。

我认为Laravel 5中的数据库事务功能可以帮助加快速度。但是我很难意识到如何在代码中使用它,并且它也可以在第一时间使用它。

<?php 

$I = new ApiTester($scenario);
$I->wantTo('create a new comment');
$I->haveHttpHeader('Authorization', 'Bearer ' . file_get_contents('tests/api/token'));
$I->sendPost('comments', [
    "document_id" => "2",
    "comment_type_id" => "2",
    "user_id" => "2",
    "body" => "Testing"
]);
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(['status' => 'success']);
$I->seeInDatabase('comment', [
    "document_id" => "2",
    "comment_type_id" => "2",
    "user_id" => "2",
    "body" => "Testing"
]);

这是我编写的代码测试。现在我尝试添加:

\DB::beginTransaction(); // At the start
\DB::rollback(); // At the end

但它不起作用。

我甚至试图完成整个测试:

\DB::transaction(function () {
    // Whole Test here
});

但即便如此也没有成功。运行测试后,我仍然在DB中看到新的注释。那么我做错了什么以及如何绕过它呢?

1 个答案:

答案 0 :(得分:0)

您的tests/api.suite.yml文件是什么样的?

它对我有用,我的看起来像这样:

class_name: ApiTester
modules:
    enabled:
        - Helper\Api
        - Asserts
        - Laravel5:
            environment_file: .env
        - REST:
            depends: Laravel5

添加这可能会有所帮助 - 但我不需要

- Laravel5:
    cleanup: true