我正在使用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中看到新的注释。那么我做错了什么以及如何绕过它呢?
答案 0 :(得分:0)
您的tests/api.suite.yml
文件是什么样的?
它对我有用,我的看起来像这样:
class_name: ApiTester
modules:
enabled:
- Helper\Api
- Asserts
- Laravel5:
environment_file: .env
- REST:
depends: Laravel5
添加这可能会有所帮助 - 但我不需要
- Laravel5:
cleanup: true